如何计算一行中的条件?

2024-03-29 10:48:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框:

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']的值是> 0。你知道吗

我们需要亲手做:

df['n'] = [3, 2, 3, 3]

我不需要说这对于较大的帧是不好的。我知道我们可以选择感兴趣的行。你知道吗

不幸的是,我无法将提供的bool值转换为01并求和。你知道吗

df['n'] = df. a > 0 + df.b > 0 + df.c > 0 + df.d > 0

投掷

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

如何纠正?


Tags: ofthe数据dataframedfisvalueuse
1条回答
网友
1楼 · 发布于 2024-03-29 10:48:25

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

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才有意义。你知道吗

编辑

在去吃午饭的路上,我意识到有一个更简单的方法,就是调用^{}

In [365]:

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

相关问题 更多 >