如何调整Pandas合并后DataFrame的列MultiIndex层级顺序?
调整MultiIndex列层级顺序的解决方案
问题场景
你已通过pd.concat生成列层级为**[数据源标识, 用户名]的MultiIndex DataFrame,需要将列层级顺序调整为[用户名, 数据源标识]**,同时让同一用户的数据源列相邻排列。
原始代码
import pandas as pd d1 = {'john': [10, 11], 'adam': [20,21]} d2 = {'john': [1,12], 'adam': [3,34]} test_df1= pd.DataFrame(data=d1) test_df2= pd.DataFrame(data=d2) # 生成当前列层级为[数据源标识, 用户名]的DataFrame current_df = pd.concat([test_df1, test_df2], keys=['test_df1','test_df2'], axis=1)
实现方案
通过swaplevel调换列层级,再用sort_index按新层级排序,即可得到目标结果:
# 调换列MultiIndex层级,并按用户名排序列 needed_df = current_df.swaplevel(axis=1).sort_index(axis=1, level=0) # 可选:将用户名转为首字母大写(与示例格式完全匹配) needed_df.columns = needed_df.columns.set_levels(needed_df.columns.levels[0].str.capitalize(), level=0)
代码说明
swaplevel(axis=1):直接调换列MultiIndex的两个层级,将原顺序[数据源标识, 用户名]改为[用户名, 数据源标识]sort_index(axis=1, level=0):按新的第一层级(用户名)对列排序,确保同一用户的两个数据源列相邻- 最后一行代码用于将小写的用户名转为首字母大写,完全匹配你给出的示例格式
内容的提问来源于stack exchange,提问作者Bartosz
相关产品推荐
相关产品推荐

