如何重新排列Pandas嵌套DataFrame列,将'region_sea'置于'region_inland'之前?
调整Pandas多层嵌套列的顺序问题
问题场景
通过pivot_table生成的DataFrame带有嵌套(多层)列结构:顶层列是count和income,底层列是region_inland和region_sea。需要将底层列中的region_sea调整到region_inland之前。
原始生成代码:
import pandas as pd df = pd.DataFrame( {'state': ['WA', 'CA', 'NY', 'NY', 'CA', 'CA', 'WA' ] , 'region': ['region_sea', 'region_inland', 'region_sea', 'region_inland', 'region_sea', 'region_sea', 'region_inland',] , 'count': [1, 3, 4, 6, 7, 8, 4] , 'income': [100, 200, 300, 400, 600, 400, 300] } ) df = df.pivot_table(index='state', columns='region', values=['count', 'income'], aggfunc={'count': 'sum', 'income': 'mean'})
尝试过以下无效代码:
df[['count']]['region_sea', 'region_inland']
解决方案
方法1:重新构造多层列索引并重新索引
直接定义目标列的层级顺序,通过reindex调整整个DataFrame的列顺序:
# 构造目标多层列索引:顶层保留count、income,底层按region_sea、region_inland排序 new_columns = pd.MultiIndex.from_product([['count', 'income'], ['region_sea', 'region_inland']]) # 重新索引列 df = df.reindex(columns=new_columns)
方法2:分顶层列调整后合并
针对每个顶层列(count和income)单独调整底层列顺序,再通过pd.concat合并:
# 分别调整count和income下的region顺序 count_part = df['count'][['region_sea', 'region_inland']] income_part = df['income'][['region_sea', 'region_inland']] # 合并两部分 df = pd.concat([count_part, income_part], axis=1)
原代码无效原因
df[['count']]返回的是仅包含count顶层列的DataFrame,无法直接通过['region_sea', 'region_inland']索引底层列,正确写法应为df['count'][['region_sea', 'region_inland']];- 原代码仅处理了
count列,未覆盖income列,无法实现整体列顺序调整。
内容的提问来源于stack exchange,提问作者cget
相关产品推荐
相关产品推荐

