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
相关产品推荐
相关产品推荐

