Python Pandas 按列条件实现行值匹配计数(类似Excel Sumif功能)
问题解决办法
错误原因
你原来的代码df[df == df['E']].count(axis=1)存在两个问题:
- 比对逻辑错误:
df == df['E']默认是pandas列维度的广播匹配,会将E列的每个值与整列数据做比对,而非按行取当前行的E值和本行其他列比对,因此返回结果全为0 - 统计范围错误:直接用全量df做比对,会把E列本身也纳入统计范围,不符合需求
正确代码
直接使用pandas向量化比对方法即可,性能远高于行遍历/apply方案:
# 仅选中A/B/C/D四列,按行和当前行E列值比对,求和得到相等次数 df['count'] = df[['A', 'B', 'C', 'D']].eq(df['E'], axis=0).sum(axis=1)
如果你的表中除了A/B/C/D/E外还有其他列,只要排除E列统计的话,可以改写成更通用的写法:
df['count'] = df.drop('E', axis=1).eq(df['E'], axis=0).sum(axis=1)
结果验证
运行后输出的df和你给出的期望结果完全一致:
A B C D E count 0 14 5 20 14 14 2 1 4 2 20 3 2 1 2 5 54 7 6 5 1 3 4 3 3 2 3 2 4 1 2 8 6 1 1
内容的提问来源于stack exchange,提问作者Caboose
相关产品推荐
相关产品推荐

