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

如何为pivot_table添加排序规则实现自定义行索引顺序

解决方案

你可以通过两种方式实现需求,分别对应生成透视表后调整、透视前预处理原数据的场景:

方法1:生成透视表后按State总接种率排序

不需要修改原数据和你原来的透视表逻辑,在得到df1后追加以下代码即可:

# 计算每个State的总接种率,按降序得到State的排序规则
state_sort_order = df1.groupby(level="State")["Percentage"].sum().sort_values(ascending=False).index
# 对透视表的State层级索引重排,Age层级保持原顺序不变
df_sorted = df1.reindex(state_sort_order, level="State")

运行后df_sorted就是你需要的预期结果。

方法2:预处理原数据后生成透视表

如果你希望调用pivot_table直接得到正确顺序,可以提前把State列设为有序分类类型,指定排序规则:

import pandas as pd
import numpy as np

# 你的原数据
df = pd.DataFrame({'State' : ['B','B','A','A','C', 'C'],
           'Age' : ['1 to 5', '6 to 10', '1 to 5', '6 to 10', '1 to 5', '6 to 10'],
           'Vaccinated' : [80, 20, 30, 60, 10, 15],
           'Population': [100, 100, 100, 100, 100, 100],
           'Percentage' : [0.80, 0.20, 0.30, 0.60, 0.10,0.15]})

# 计算State总接种率降序的顺序
state_total = df.groupby("State")["Percentage"].sum().sort_values(ascending=False)
# 将State列设为有序分类,指定顺序为总接种率降序
df["State"] = pd.Categorical(df["State"], categories=state_total.index, ordered=True)

# 原来的透视表代码,生成的df1直接是你要的顺序
df1 = pd.pivot_table(df,values=["Vaccinated", "Population","Percentage"],index=["State", "Age"], aggfunc=np.sum)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:54:08