如何对带有多个条件的行的计数pandas dataframe列求和

2024-09-26 22:53:33 发布

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

我在翻译熊猫的excel公式。其中具有指定条件的列按行计数和求和。如果一个单元格 从满足给定条件的选定列中,然后添加满足条件的计数。你知道吗

我有数据帧:

测向:

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)

熊猫配方:

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))

我从熊猫公式中得到以下结果: 测向:

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

Tags: dfcountnan条件excel公式计数x1
1条回答
网友
1楼 · 发布于 2024-09-26 22:53:33

我认为您需要sum布尔掩码转换为整数:

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)

相关问题 更多 >

    热门问题