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实现
是否可以在一个命令中实现
在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)
要计算非零值,只需执行
为了得到你想要的结果,做
1 | df.groupby('user_id').apply(lambda column: column.sum()/(column != 0).sum()) |