gpt4 book ai didi

python - 如何按行对具有多个条件的计数 Pandas 数据框列求和

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:18 28 4
gpt4 key购买 nike

我正在用 pandas 翻译一个 excel 公式。计算具有指定条件的列并逐行求和。如果一个单元格,我必须每行计数 从所选列中满足给定条件,然后添加满足条件的计数。

我有数据框:

df:

a    b     c
14 x1 2
17 x2 2
0 x,1 3
1 x1 1

Excel公式:

= COUNTIFS($U2,14,$X2,"x2",$W2,2)+COUNTIFS($U2,17,$X2,"x2",$W2,2)+COUNTIFS(U2,14,$X2,"x1",$W2,2)

Pandas 公式:

df['counted'] = (df[(df['a']==14) & (df['b']=='x2') & (df['c']==2)].count(axis=1)) + (df[(df['a']==17) & (df['b']=='x2') & (df['c']==2)].count(axis=1)) + (df[(df['a']==14) & (df['b']=='x1') & (df['c']==2)].count(axis=1))

我从我的 pandas 公式中得到以下结果:df:

a    b     c   counted
14 x1 2 NaN
17 x2 2 NaN
0 x,1 3 NaN
1 x1 1 NaN

预期结果如下图所示。非常感谢任何帮助获得正确公式的帮助。

预期结果 df:

a    b     c   counted
14 x1 2 0
17 x2 2 1
0 x,1 3 0
1 x1 1 0

最佳答案

我相信您需要将 sum bool 掩码转换为整数:

a = (df['a']==14) & (df['b']=='x2') & (df['c']==2)
b = (df['a']==17) & (df['b']=='x2') & (df['c']==2)
c = (df['a']==14) & (df['b']=='x1') & (df['c']==2)

还有可能的链条条件,以避免重复以获得更好的性能:

m1 = df['a']==14
m2 = df['b']=='x2'
m3 = df['c']==2
m4 = df['a']==17
m5 = df['b']=='x1'

a = m1 & m2 & m3
b = m4 & m2 & m3
c = m1 & m5 & m3

df['counted'] = a.astype(int)+ b.astype(int) + c.astype(int)
print (df)
a b c counted
0 14 x1 2 1
1 17 x2 2 1
2 0 x,1 3 0
3 1 x1 1 0

或按位 OR 链掩码,然后转换为整数:

df['counted'] = (a | b | c).astype(int)

关于python - 如何按行对具有多个条件的计数 Pandas 数据框列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54630294/

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