如何为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
相关产品推荐
相关产品推荐

