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

如何使用Python Pandas实现类似Excel SUMIFS的多条件求和

Pandas实现等效Excel SUMIFS多条件跨周期聚合方法

核心逻辑

针对「固定维度列 + 连续周期数值列」结构的DataFrame,不需要手动枚举所有周期列,代码可自动适配到表中最后一个周期列,一次性完成所有周期维度的多条件求和,完全等效Excel逐列写SUMIFS公式的效果,计算效率远高于Excel公式。

实现步骤

  • 第一步:导入依赖、对齐目标数据结构
import pandas as pd
import numpy as np

# 示例数据结构和描述完全一致,包含Location/Team/Asset三个维度列,后续为P01-P04及更多周期列
df = pd.DataFrame({
    'Location': ['England', 'England', 'Scotland', 'England', 'Scotland'],
    'Team': ['A', 'A', 'B', 'B', 'B'],
    'Asset': ['X', 'Y', 'X', 'X', 'Y'],
    'P01': [10, 20, 15, 5, 8],
    'P02': [12, 22, 17, 7, 10],
    'P03': [14, 24, 19, 9, 12],
    'P04': [16, 26, 21, 11, 14]
})
  • 第二步:自动识别列范围,无需手动写死周期列名

自动截取维度列之后的所有列作为周期计算范围,后续新增P05、P06等周期列时不需要修改代码

# 指定作为聚合匹配条件的维度列
dim_cols = ['Location', 'Team', 'Asset']
# 自动提取从维度列结束位置到表尾的所有周期列
period_cols = df.columns[len(dim_cols):].tolist()
  • 第三步:执行多条件聚合,等效全周期SUMIFS计算
# 按指定维度列分组,对所有周期列求和,结果结构和预期目标表完全一致
sumifs_result = df.groupby(dim_cols, as_index=False)[period_cols].sum()

常见调整方案

  • 如果不需要按全维度聚合,比如只按Location、Team两个维度汇总、不区分Asset,直接修改dim_cols列表为对应列名即可
  • 如果聚合前需要先筛选数据(比如仅计算England地区的数值),先做行筛选再聚合即可:
england_result = df[df['Location'] == 'England'].groupby(dim_cols, as_index=False)[period_cols].sum()
  • 如果需要生成各维度小计、总计,可以用透视表实现:
pivot_total_result = pd.pivot_table(
    df,
    index=dim_cols,
    values=period_cols,
    aggfunc=np.sum,
    margins=True,
    margins_name='总计'
).reset_index()

和Excel SUMIFS的对应关系

  • 上述代码的逻辑等价于:在Excel中对每一个周期列单独编写SUMIFS公式,将dim_cols中的列作为匹配条件列,逐列向右填充公式到最后一个周期列。Pandas向量化计算不会出现公式引用错位问题,十万行以上数据的计算速度比Excel快数十倍。

内容的提问来源于stack exchange,提问作者Brad Scott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:39:35