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

如何重新排列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)

原代码无效原因

  1. df[['count']]返回的是仅包含count顶层列的DataFrame,无法直接通过['region_sea', 'region_inland']索引底层列,正确写法应为df['count'][['region_sea', 'region_inland']];
  2. 原代码仅处理了count列,未覆盖income列,无法实现整体列顺序调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:55:20