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

Python中两个Pandas DataFrame的分组与合并问题

解决Pandas DataFrame合并、列分组与添加均值总计行的方案

没问题,我来帮你搞定这个汇总需求!下面我会一步步带你实现,用具体的代码示例来演示:

步骤1:准备模拟数据(对应你已聚合好的df1和df2)

先假设你已经有两个聚合完成的DataFrame,比如分别对应信息域A和信息域B的业务数据:

import pandas as pd

# 模拟你已经处理好的聚合后DataFrame
df1 = pd.DataFrame({
    '分组': ['组1', '组2', '组3'],
    '销售额': [100, 200, 300],
    '利润': [10, 20, 30]
}).set_index('分组')  # 假设你的聚合是按"分组"维度做的

df2 = pd.DataFrame({
    '分组': ['组1', '组2', '组3'],
    '销售额': [150, 250, 350],
    '利润': [15, 25, 35]
}).set_index('分组')

步骤2:合并两个DataFrame并标记信息域

先给每个DataFrame添加一个信息域标识列,再把它们合并到一起:

# 给每个DF打上信息域标签
df1['信息域'] = '信息域A'
df2['信息域'] = '信息域B'

# 合并两个DF
combined_df = pd.concat([df1, df2]).reset_index()

步骤3:将列按信息域分组(构建多层列索引)

用pivot方法把信息域转换为列的上层分组,让列结构按信息域归类:

# 构建多层列索引,让信息域作为列的上层分组
final_df = combined_df.pivot(
    index='分组', 
    columns='信息域', 
    values=['销售额', '利润']  # 这里替换成你实际的统计列名
)

# 调整列的层级顺序,让信息域显示在最上层
final_df = final_df.swaplevel(0, 1, axis=1).sort_index(axis=1)

这一步完成后,你的列会变成信息域A和信息域B两个分组,每个分组下包含对应的统计列,看起来更规整。

步骤4:添加总计行(计算各列均值)

最后新增一行“总计”,值为对应列的均值:

# 计算各列的均值,并重命名行索引为"总计"
total_row = final_df.mean().rename('总计')

# 将总计行添加到DataFrame末尾
final_df = pd.concat([final_df, pd.DataFrame(total_row).T])

最终效果

运行完上面的代码后,你会得到这样的结果:

信息域A        信息域B       
         销售额  利润   销售额  利润
分组                         
组1     100.0  10  150.0  15
组2     200.0  20  250.0  25
组3     300.0  30  350.0  35
总计     200.0  20  250.0  25

如果你的实际数据结构和示例有差异(比如索引不是分组、统计列名不同),只需要替换代码里对应的字段名称就可以适配啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:14:48