Har*_*gal 51 python dataframe pandas
我有一个python-pandas-dataframe,其中第一列是user_id,其余列是标签(tag_0到tag_122).我有以下格式的数据:
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
Run Code Online (Sandbox Code Playgroud)
我的目标是Sum(Tag)/Count(NonZero(Tags))
为每个user_id 实现
df.groupby('user_id').sum()
,给我sum(tag)
,但是我对计算非零值一无所知
是否有可能Sum(Tag)/Count(NonZero(Tags))
在一个命令中实现?
在MySQL中我可以实现如下: -
select user_id, sum(tag)/count(nullif(tag,0)) from table group by 1
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
The*_*Cat 104
我最喜欢的每列中获得非零数的方法是
df.astype(bool).sum(axis=0)
Run Code Online (Sandbox Code Playgroud)
对于每行中使用的非零数
df.astype(bool).sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
(感谢Skulas)
如果你的df中有nans,你应该先将它们设为零,否则它们将被计为1.
df.fillna(0).astype(bool).sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
(感谢SirC)
Sar*_*rah 21
为什么不使用np.count_nonzero
?
np.count_nonzero(df)
np.count_nonzero(df, axis=0)
np.count_nonzero(df, axis=1)
它也适用于日期。
Bre*_*arn 12
要计算非零值,只需执行(column!=0).sum()
,column
您要为其执行的数据在哪里. column != 0
返回一个布尔数组,True为1,False为0,因此求和会给出与条件匹配的元素数.
为了得到你想要的结果,做
df.groupby('user_id').apply(lambda column: column.sum()/(column != 0).sum())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
57142 次 |
最近记录: |