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

Python中如何按指定因子层级对pandas DataFrame行重排序

解决方案

两种方案均仅依赖pandas内置功能,无需安装额外第三方库,符合使用要求。

方案1:透视前提前设置有序分类(推荐)

该方案优势为后续所有涉及Size列的分组、透视、排序操作都会默认使用自定义顺序,无需每次单独调整。

import numpy as np
import pandas as pd

# 原始数据构建
data = {'Item': np.repeat(['Latte', 'Americano', 'Cappuccino'], 3),
        'Size': ['Small', 'Medium', 'Large']*3,
        'Price': [2.25, 2.60, 2.85, 1.95, 2.25, 2.45, 2.65, 2.95, 3.25]
       }
df = pd.DataFrame(data, columns = ['Item', 'Size', 'Price'])

# 自定义Size列的顺序,转换为有序分类类型
size_order = ['Small', 'Medium', 'Large']
df['Size'] = pd.Categorical(df['Size'], categories=size_order, ordered=True)

# 执行透视,输出索引自动按自定义顺序排列
df_pivot = pd.pivot_table(df, index = ['Size'], columns = 'Item')
print(df_pivot)

输出结果:

Price                  
Item Americano Cappuccino Latte
Size                           
Small     1.95       2.65  2.25
Medium    2.25       2.95  2.60
Large     2.45       3.25  2.85

方案2:已有透视结果,直接重排索引

如果已经生成了透视表,不想重新运行全流程,可以直接用reindex方法按自定义顺序重排行索引:

import numpy as np
import pandas as pd

# 原有透视流程
data = {'Item': np.repeat(['Latte', 'Americano', 'Cappuccino'], 3),
        'Size': ['Small', 'Medium', 'Large']*3,
        'Price': [2.25, 2.60, 2.85, 1.95, 2.25, 2.45, 2.65, 2.95, 3.25]
       }
df = pd.DataFrame(data, columns = ['Item', 'Size', 'Price'])
df_pivot = pd.pivot_table(df, index = ['Size'], columns = 'Item')

# 直接按自定义顺序重排索引
size_order = ['Small', 'Medium', 'Large']
df_pivot = df_pivot.reindex(size_order)
print(df_pivot)

两种方案输出结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:27:03