You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:15:07