我有一个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
我的目标是为每个user_id实现Sum(Tag)/Count(NonZero(Tags))
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
任何帮助将不胜感激。
5条答案
按热度按时间tkclm6bt1#
我最喜欢的获取每列中非零值的方法是
对于每行中的非零数,使用
(感谢Skulas)
如果你的df中有nans,你应该先把它们设为零,否则它们会被算作1。
(感谢Sirc)
bwitn5fc2#
为什么不使用
np.count_nonzero
?1.要计算整个 Dataframe 的非零个数,请执行
np.count_nonzero(df)
1.计算所有行
np.count_nonzero(df, axis=0)
的非零个数1.计算所有列
np.count_nonzero(df, axis=1)
的非零数它也适用于日期。
6rvt4ljy3#
要计算非零值,只需执行
(column!=0).sum()
,其中column
是您要计算的数据。column != 0
返回一个布尔数组,True为1,False为0,因此将其求和可以得到符合条件的元素数。为了得到你想要的结果,
iklwldmw4#
我知道这个问题很老,但似乎OP的目的与问题标题不同:
我的目标是为每个user_id实现Sum(Tag)/Count(NonZero(Tags))。
对于OP的目标,我们可以用NaN替换0并使用
groupby
+mean
(这是可行的,因为mean
默认跳过NaN):输出:
dy1byipe5#
一个简单的列表解析,用于获取df每列中非零值的计数: