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

如何在Pandas多层索引DataFrame中追加指定索引的DataFrame

Pandas多层索引DataFrame追加数据的正确方法

问题说明

现有一个多层索引的DataFrame:

import pandas as pd

index = pd.MultiIndex.from_product([["A", "B"], ["AA", "BB"]])
columns = ["X", "Y"]
df = pd.DataFrame([[1,2],[5,8],[1,2],[5,8]], index = index, columns = columns)

输出结果:

X  Y
A AA  1  2
  BB  5  8
B AA  1  2
  BB  5  8

需要将另一个普通索引的DataFrame追加到上述DataFrame中,使其外层索引为C:

df2 = pd.DataFrame([[1,4], [5,6]], index =  ["AAA", "BBB"], columns = columns)

输出结果:

X  Y
AAA  1  4
BBB  5  6

期望最终得到的结果为:

X    Y
A   AA  1    2
    BB  5    8
B   AA  1    2
    BB  5    8
C  AAA  1    4
   BBB  5    6

直接使用df.loc['C',:] = df2无法得到预期结果,会出现NaN值:

X    Y
A AA  1.0  2.0
  BB  5.0  8.0
B AA  1.0  2.0
  BB  5.0  8.0
C     NaN  NaN

正确实现方法

方法1:为df2构建多层索引后拼接

先将df2的索引转换为包含外层C的多层索引,再与原df拼接:

# 为df2创建多层索引
df2_multi = df2.set_index(pd.MultiIndex.from_tuples([("C", idx) for idx in df2.index]))
# 拼接两个DataFrame
result = pd.concat([df, df2_multi])

方法2:利用pd.concat的keys参数简化操作

通过keys参数直接为df2指定外层索引,无需手动构造多层索引:

result = pd.concat([df, df2], keys=["", "C"]).droplevel(0)

这里keys=["", "C"]表示原df保留原有索引结构,df2的外层索引设为C,最后通过droplevel(0)移除原df新增的空索引层,得到目标结构。

方法3:使用append(已弃用,不推荐)

如果仍习惯使用append方法,同样需要先为df2构造多层索引:

df2_multi = df2.set_index(pd.MultiIndex.from_tuples([("C", idx) for idx in df2.index]))
result = df.append(df2_multi)

注意:append方法在Pandas 2.0及以上版本已被弃用,官方推荐使用pd.concat替代。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:06:24