我有一个看起来像这样的df:
Col1 Col2 Col3 ColN
0 0 2 1
10 5 0 8
0 0 0 12
尝试获取值在所有时间都不为零的所有时间的总和/均值(然后将其添加为“总和/均值”列),以得到输出:
Col1 Col2 Col3 ColN Sum
0 0 2 1 2
10 5 0 8 1
0 0 0 12 3
在df中,我正在记录事件发生的次数。我正在尝试获取平均出现次数或频率(或者,我猜想,某行中的值不为0的次数)。
是否有某种方法可以在整个数据帧范围内应用?我大约有2000行,并且一直在努力尝试使用Counter,但是设法获得了仅对1行进行观察的次数:(
或者我应该将所有非零数字都转换为虚拟变量,但是仍然不知道如何选择和求和?
答案 0 :(得分:0)
正如yatu所建议的,
df.ne(0).sum(1)
完成任务。 (注意:当我用它来做df ['Sum'] = df.ne(0).sum(1)时,会收到警告消息,但我并不真正理解其中的含义)
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
实际上,我在想要的列中得到了几行带有零的行,这些行仍然存在(不确定原因),所以我也去掉了这之后的所有带有零的行(这非常丑陋,但是不知道... )
df = df[(df[['Sum']] != 0).all(axis=1)]