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

标签 python pandas

我正在用 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/

相关文章:

python - 在迭代 pandas 数据框时更新它的更好方法

Python Pandas : get max index within groupby object?

python - 如何运行一个本地主机,该主机可以一直提供服务,直到关键字将其停止为止(全部来自.py文件)?

python - 检测引发异常的原因

python - xlsxwriter 可以创建 xls 文件吗?

python - 如何通过知道线程 ID 来获取线程的名称?

python - 用来自同一行但不同列的值填充字典

python - 从系列创建数据帧时保持列顺序

python - Django 邮箱

python - SAS Proc Corr 与 Python 中的加权