如何在Pandas中实现Excel的COUNTIFS多条件计数功能?
Pandas 复现 Excel COUNTIFS 功能
对应Excel公式=COUNTIFS(B:B,"BD*",A:A,A2,C:C,">"&C2)的需求,我们可以用两种方式在Pandas中实现:
方法一:直观逐行判断(适合小数据集)
直接对每一行应用条件筛选,统计符合要求的记录数:
import pandas as pd # 假设数据存储在df中 def count_matching(row): # 构建筛选条件:Type以BD开头、Reference匹配当前行、Doc Condition大于当前行 condition = ( df['Type'].str.startswith('BD', na=False) & (df['Reference'] == row['Reference']) & (df['Doc Condition'] > row['Doc Condition']) ) return condition.sum() # 新增列存储统计结果 df['Count'] = df.apply(count_matching, axis=1)
方法二:基于合并的高效实现(适合大数据集)
先筛选出Type以BD开头的子集,通过合并关联相同Reference的记录,最后统计符合条件的数量:
import pandas as pd # 筛选Type以BD开头的记录 bd_subset = df[df['Type'].str.startswith('BD', na=False)].copy() # 按Reference合并原数据与BD子集 merged_data = df.merge( bd_subset[['Reference', 'Doc Condition']], on='Reference', suffixes=('', '_bd') ) # 分组统计每个原行对应的符合条件的记录数 counts = merged_data.groupby(df.index)['Doc Condition_bd'].apply( lambda x: (x > merged_data.loc[x.index, 'Doc Condition']).sum() ) # 将结果赋值回原数据框 df['Count'] = counts
注意事项
str.startswith中添加na=False是为了处理Type列存在空值的情况,避免报错。- 方法二通过减少重复筛选次数,比逐行apply的效率更高,适合处理十万行以上的数据集。
内容的提问来源于stack exchange,提问作者Brandon McWilliams
相关产品推荐
相关产品推荐

