如何计算一行的条件?

时间:2015-03-20 12:16:37

标签: python pandas

我有一个pandas数据框:

df = pd.DataFrame({
    'a': [1, 2, 0, 3],
    'b': [1, 2, 0, 0],
    'c': [5, 2, 0, 3],
    'd': [0, 3, 7, 1]
})

我现在想要创建另一个列n,它会计算列['a', 'b', 'c', 'd']的{​​{1}}列的值。

我们需要手动:

> 0

我不需要说明这对于较大的帧来说是不方便的。我知道我们可以使用df['n'] = [3, 2, 3, 3] ,...,df.a > 0

选择我们感兴趣的行

很遗憾,我无法将提供的df.d > 0值转换为bool0并将它们相加。

1

抛出

  

ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

如何更正?

1 个答案:

答案 0 :(得分:2)

您可以执行列表理解,循环遍历列,然后在该列上使用布尔条件,删除不符合条件和呼叫计数的值:

In [360]:

[df.loc[df[col]>0,col].dropna().count() for col in df]
Out[360]:
[3, 2, 3, 3]

这将产生列:

In [361]:

df['n'] = [df.loc[df[col]>0,col].dropna().count() for col in df]
df
Out[361]:
   a  b  c  d  n
0  1  1  5  0  3
1  2  2  2  3  2
2  0  0  0  7  3
3  3  0  3  1  3

在此阶段,将行标记为列名称可能是有意义的,这样n才有意义。

修改

我在午餐途中意识到有一种简单的方法只是致电count

In [365]:

df[df>0].count()
Out[365]:
a    3
b    2
c    3
d    3
dtype: int64