对于每一行,选择值不为“ 0”的所有实例(在任何/所有列中)

时间:2019-07-01 09:50:54

标签: python pandas

我有一个看起来像这样的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行进行观察的次数:(

或者我应该将所有非零数字都转换为虚拟变量,但是仍然不知道如何选择和求和?

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)]