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

如何使用Python Pandas按产品汇总动态BP/RE列的数值?

按产品动态汇总DataFrame数值实现方案

输入DataFrame

import pandas as pd

df = pd.DataFrame({'factory': ['kerala', 'kerala', 'kerala', 'delhi', 'delhi', 'goa', 'goa'],
                   'plant': ['', '', '', '', '', '', ''],
                   'market': ['', '', '', '', '', '', ''],
                   'product': ['A', 'B', 'C', 'A', 'B', 'A', 'B'],
                   'BP4-2023': [4, 4, 5, 6, 4, 5, 5],
                   'RE4-2023': [7, 7, 8, 8, 7, 8, 8],
                   'BP5-2023': [4, 4, 5, 6, 4, 5, 5],
                   'RE5-2023': [7, 7, 8, 8, 7, 8, 8]})

需求说明

输入DataFrame中以BP/RE开头的列是动态变化的(随年月更新),product列也可能新增产品,需要自动适配这些变化,按产品汇总对应数值列,并生成指定格式的输出(首行显示TOTAL,其余行展示各产品汇总结果,factory/plant/market列除首行外留空)。

实现代码

# 动态识别所有需要汇总的数值列(BP/RE开头的列)
value_cols = [col for col in df.columns if col.startswith(('BP', 'RE'))]

# 按product分组,对数值列求和
product_summary = df.groupby('product')[value_cols].sum().reset_index()

# 构造TOTAL汇总行
total_row = pd.DataFrame({
    'factory': ['TOTAL'],
    'plant': [''],
    'market': [''],
    'product': [''],
    **{col: [product_summary[col].sum()] for col in value_cols}
})

# 合并TOTAL行与产品汇总数据,补充空值并调整列顺序
result = pd.concat([total_row, product_summary], ignore_index=True)
result[['factory', 'plant', 'market']] = result[['factory', 'plant', 'market']].fillna('')
result = result[df.columns]

# 查看结果
print(result)

代码说明

  1. 动态筛选数值列:通过列表推导式自动识别所有以BP或RE开头的列,无论后续新增多少年月的列都能适配。
  2. 分组汇总产品数据:直接按product列分组,对筛选出的数值列求和,新增产品会自动被纳入分组计算。
  3. 构造TOTAL行:单独计算所有数值列的总和,生成首行的汇总数据。
  4. 格式调整:合并数据后填充空值,并保持列顺序与原DataFrame一致,确保输出格式符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:31