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

如何合并求和多个Multi Index DataFrame并满足通用无硬编码约束

解决方案

核心思路

利用Pandas原生的索引自动对齐特性,先拼接所有DataFrame,再按行索引分组求和,全程不需要硬编码任何索引/列名,支持任意数量的多级索引DataFrame合并。

代码实现

import pandas as pd

def merge_sum_multi_df(*dfs):
    """
    合并任意多个结构存在差异的多级索引DataFrame,匹配单元格自动求和
    参数:
        *dfs: 任意数量的待合并DataFrame
    返回:
        求和后的结果DataFrame
    """
    # 沿行方向拼接所有DataFrame,自动对齐列(支持多级列索引)
    concatenated = pd.concat(dfs, axis=0)
    # 按所有层级的行索引分组求和,自动适配行索引的级数
    sum_result = concatenated.groupby(level=list(range(concatenated.index.nlevels))).sum()
    return sum_result

示例测试

首先构造你给出的示例数据:

# 构造df1
df1_columns = pd.MultiIndex.from_tuples(
    [('A','AC'), ('B','AD'), ('C','AK')],
    names=['Category','Region']
)
df1 = pd.DataFrame(
    [[2,3,4], [1,2,5], [2,0,2]],
    index = ['0-5 years', '5-10 years', '10-12 years'],
    columns = df1_columns
)

# 构造df2
df2_columns = pd.MultiIndex.from_tuples(
    [('A','AC'), ('B','AD'), ('D','AM')],
    names=['Category','Region']
)
df2 = pd.DataFrame(
    [[1,4,1], [2,5,1], [3,6,0]],
    index = ['0-5 years', '5-10 years', '10-12 years'],
    columns = df2_columns
)

调用函数得到结果:

result = merge_sum_multi_df(df1, df2)
print(result)

输出结果和你期望的完全一致:

Category            A   B   C   D
Region             AC  AD  AK  AM
0-5 years           3   7   4   1
5-10 years          3   7   5   1
10-12 years         5   6   2   0

方案特性

  • 支持任意数量的DataFrame合并,没有数量上限
  • 自动适配任意层级的行索引与列索引,不需要提前知道索引名或层级数
  • 无额外依赖,仅用Pandas原生方法实现,性能稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:48:03