gpt4 book ai didi

python - Pandas :按行计算值

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:25 27 4
gpt4 key购买 nike

我有一个数字数据框,例如:

x = np.array([[1,2,3],[-1,-1,1],[0,0,0]])
df = pd.DataFrame(x, columns=['A','B','C'])
df

A B C
0 1 2 3
1 -1 -1 1
2 0 0 0

我想计算每一行的正值、负值和等于 0 的值的数量。我一直在尝试以下操作:

df['positive_count'] = df.apply(lambda row: (row > 0).sum(), axis = 1)
df['negative_count'] = df.apply(lambda row: (row < 0).sum(), axis = 1)
df['zero_count'] = df.apply(lambda row: (row == 0).sum(), axis = 1)

但我得到了以下结果,这显然是不正确的

   A  B  C  positive_count  negative_count  zero_count
0 1 2 3 3 0 1
1 -1 -1 1 1 2 0
2 0 0 0 0 0 5

任何人都知道可能出了什么问题,或者可以帮助我找到完成我正在寻找的事情的最佳方法吗?

谢谢。

最佳答案

有一些方法,但一种选择是使用 np.signget_dummies:

u = (pd.get_dummies(np.sign(df.stack()))
.sum(level=0)
.rename({-1: 'negative_count', 1: 'positive_count', 0: 'zero_count'}, axis=1))
u

negative_count zero_count positive_count
0 0 0 3
1 2 0 1
2 0 3 0

df = pd.concat([df, u], axis=1)
df

A B C negative_count zero_count positive_count
0 1 2 3 0 0 3
1 -1 -1 1 2 0 1
2 0 0 0 0 3 0

np.sign 将零与正值和负值区别对待,因此非常适合在此处使用。


另一种选择是groupbyvalue_counts:

(np.sign(df)
.stack()
.groupby(level=0)
.value_counts()
.unstack(1, fill_value=0)
.rename({-1: 'negative_count', 1: 'positive_count', 0: 'zero_count'}, axis=1))

negative_count zero_count positive_count
0 0 0 3
1 2 0 1
2 0 3 0

稍微冗长但仍然值得了解。

关于python - Pandas :按行计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55052322/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com