我有一个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
值转换为bool
和0
并将它们相加。
1
抛出
ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
如何更正?
答案 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