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

合并含相同列的两个DataFrame时,如何调整列层级?

合并同列DataFrame并调整列层级的方法

步骤1:构造示例DataFrame

先准备两个结构匹配的DataFrame,分别存储学生基本信息和季度成绩:

import pandas as pd

# 学生信息表(带列层级)
df_info = pd.DataFrame(
    {'Name': ['Save Mithil Vinay', 'Abraham Ancy Chandy', 'Barabde Pranjal Sanjiv', 'Bari Siddhesh Kishor', 'Barretto Cleon Domnic']},
    index=pd.MultiIndex.from_tuples(
        [(pd.to_datetime('2016-08-01'), 0),
         (pd.to_datetime('2016-08-01'), 1),
         (pd.to_datetime('2016-08-01'), 2),
         (pd.to_datetime('2016-08-01'), 3),
         (pd.to_datetime('2016-08-01'), 4)],
        names=['Month', 'Roll No']
    )
)
df_info.columns = pd.MultiIndex.from_tuples([('Name', 'Student Name')])

# 成绩表(拆分列名转为多级索引)
df_scores = pd.DataFrame(
    {'Q1_IS': [85, 78, 92, 88, 76],
     'Q1_CC': [90, 82, 85, 91, 80],
     'Q2_IS': [88, 80, 95, 86, 79],
     'Q2_CC': [87, 84, 90, 89, 82],
     'Q3_IS': [90, 85, 93, 87, 81],
     'Q3_CC': [88, 86, 91, 90, 83]},
    index=pd.MultiIndex.from_tuples(
        [(pd.to_datetime('2016-08-01'), 0),
         (pd.to_datetime('2016-08-01'), 1),
         (pd.to_datetime('2016-08-01'), 2),
         (pd.to_datetime('2016-08-01'), 3),
         (pd.to_datetime('2016-08-01'), 4)],
        names=['Month', 'Roll No']
    )
)
df_scores.columns = df_scores.columns.str.split('_', expand=True)

步骤2:合并两个DataFrame

使用pd.concat按列合并:

df_combined = pd.concat([df_info, df_scores], axis=1)

步骤3:调整列层级顺序

根据需求重新排列列的层级和顺序,得到目标格式:

# 按目标结构指定列的顺序
target_columns = [
    ('Name', 'Student Name'),
    ('Q1', 'IS'), ('Q1', 'CC'),
    ('Q2', 'IS'), ('Q2', 'CC'),
    ('Q3', 'IS'), ('Q3', 'CC')
]
df_combined = df_combined.reindex(columns=target_columns)

最终结果

输出后会得到你期望的格式:

Name                    Q1     Q2    Q3 
               Student Name            IS CC  IS CC IS CC
Month   Roll No                             
2016-08-01  0   Save Mithil Vinay       85 90  88 87 90 88
            1   Abraham Ancy Chandy     78 82  80 84 85 86
            2   Barabde Pranjal Sanjiv  92 85  95 90 93 91
            3   Bari Siddhesh Kishor    88 91  86 89 87 90
            4   Barretto Cleon Domnic   76 80  79 82 81 83

额外技巧:调整列层级

如果原始DataFrame的列层级顺序不对,可使用以下方法调整:

  • swaplevel(0,1,axis=1):交换列的两个层级
  • reorder_levels([0,1],axis=1).sort_index(axis=1):重新排列层级并排序列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:45:55