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

如何为已有Pandas DataFrame指定列添加层级名称并合并多表?

给Pandas DataFrame添加列层级索引并合并多个DataFrame

一、给现有DataFrame添加顶层列索引

你找对方向了,用MultiIndex完全能搞定这个需求,咱们直接对DataFrame的columns属性做修改就行,步骤很简单:

先运行你提供的创建DataFrame的代码:

import pandas as pd

wins = {'Wins': (151, 120)}
losses = {'Losses': (124, 110)}
dict_all = {**wins, **losses}
df = pd.DataFrame.from_dict(dict_all, orient='index', columns=['Season_1', 'Season_2'])

接下来用pd.MultiIndex.from_product()给列套上顶层名称"John",这个方法能快速生成多层索引结构:

# 把原列名作为第二层,"John"作为顶层,构建多级列索引
df.columns = pd.MultiIndex.from_product([['John'], df.columns])

现在输出df,就是你想要的结构:

John
Season_1Season_2
Wins151120
Losses124110

二、合并多个带层级索引的DataFrame

你提到想用pandas.merge(),不过这里其实用pd.concat()更合适——因为咱们的多个DataFrame行索引(Wins、Losses)完全一致,直接按列拼接就好,比merge更简洁高效。

先创建对应Adam的DataFrame,同样给它加上顶层列索引:

# 创建Adam的DataFrame
wins_adam = {'Wins': (111, 110)}
losses_adam = {'Losses': (102, 110)}
dict_adam = {**wins_adam, **losses_adam}
df_adam = pd.DataFrame.from_dict(dict_adam, orient='index', columns=['Season_1', 'Season_2'])
# 添加顶层列索引"Adam"
df_adam.columns = pd.MultiIndex.from_product([['Adam'], df_adam.columns])

然后用concat按列拼接两个DataFrame:

combined_df = pd.concat([df, df_adam], axis=1)

最终得到的combined_df就是你期望的结构:

JohnAdam
Season_1Season_2Season_1Season_2
Wins151120111110
Losses124110102110

要是你坚持想用merge也可以(只是没必要),因为行索引一致,我们可以把索引作为键来合并:

# 用merge实现的方式(仅作参考,更推荐concat)
combined_df = df.merge(df_adam, left_index=True, right_index=True)

结果和concat完全一致,但concat的写法更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:07:30