合并含相同列的两个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
相关产品推荐
相关产品推荐

