如何为已有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_1 | Season_2 | |
| Wins | 151 | 120 |
| Losses | 124 | 110 |
二、合并多个带层级索引的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就是你期望的结构:
| John | Adam | |||
|---|---|---|---|---|
| Season_1 | Season_2 | Season_1 | Season_2 | |
| Wins | 151 | 120 | 111 | 110 |
| Losses | 124 | 110 | 102 | 110 |
要是你坚持想用merge也可以(只是没必要),因为行索引一致,我们可以把索引作为键来合并:
# 用merge实现的方式(仅作参考,更推荐concat) combined_df = df.merge(df_adam, left_index=True, right_index=True)
结果和concat完全一致,但concat的写法更直接。
内容的提问来源于stack exchange,提问作者Johannes Schmidt
相关产品推荐
相关产品推荐

