关于pandas:在python中计算数据帧的每一列中的非零值

Counting non zero values in each column of a dataframe in python

我有一个python-pandas-dataframe,其中第一列是user_id,其余列是标签(tag_0到tag_122)。
我有以下格式的数据:

1
2
3
4
5
6
7
UserId  Tag_0   Tag_1
7867688 0   5
7867688 0   3
7867688 3   0
7867688 3.5 3.5
7867688 4   4
7867688 3.5 0

我的目标是为每个user_id实现Sum(Tag)/Count(NonZero(Tags))

df.groupby('user_id').sum(),给我sum(tag),但是我对计算非零值一无所知

是否可以在一个命令中实现Sum(Tag)/Count(NonZero(Tags))

在MySQL中我可以实现如下: -

1
select user_id, sum(tag)/count(nullif(tag,0)) from table group by 1

任何帮助将不胜感激。


我最喜欢的每列中获得非零数的方法是

1
df.astype(bool).sum(axis=0)

对于每行中使用的非零数

1
df.astype(bool).sum(axis=1)

(感谢Skulas)

如果你的df中有nans,你应该先将它们设为零,否则它们将被计为1。

1
df.fillna(0).astype(bool).sum(axis=1)

(感谢SirC)


要计算非零值,只需执行(column!=0).sum(),其中column是您要执行此操作的数据。 column != 0返回一个布尔数组,True为1,False为0,因此对此求和可以得到与条件匹配的元素数。

为了得到你想要的结果,做

1
df.groupby('user_id').apply(lambda column: column.sum()/(column != 0).sum())