首页 > 解决方案 > 对保持多个索引匹配的熊猫数据透视表进行排序

问题描述

是否可以对数据框进行排序以保持索引之间的匹配?

我的df:

             budget population
state   fu      
acre    ac1  600    50
        ac2  25     110
bahia   ba1  2300   80
        ba2   1     10
paulo   sp1  1000   100
        sp2  1000   230

我想得到下面的输出,因为索引 bahia 的总预算更高:

             budget population
state   fu      
bahia   ba1  2300   80
        ba2   1     10
paulo   sp1  1000   100
        sp2  1000   230
acre    ac1  600    50
        ac2  25     110

但是在使用 sort_values() 之后,我得到以下输出:

              budget population
state   fu      
bahia   ba1   2300   80
paulo   sp1   1000   100
        sp2   1000   230
acre    ac1   600    50
        ac2   25     110
bahia   ba2    1     10

我更新了问题以提供更多背景信息

标签: pythonpandas

解决方案


这是一种无需计算总预算即可进行排序的方法。IIUC,即使某些州的总预算比其他州大,但fu预算较小,这应该会返回您需要的东西。

首先,我们budget按州分组。
第二,计算max预算。
第三,按降序对这些值进行排序。
第四,取index这个新Seriesstate名字。
最后,我们原来reindex的适当的新订单。leveldf

new_index = df["budget"]\
    .groupby("state")\
    .max()\
    .sort_values(ascending=False)\
    .index # just return the index

df.reindex(new_index, level=0)

输出:

           budget  population
state fu                     
bahia ba1    2300          80
      ba2       1          10
paulo sp1    1000         100
      sp2    1000         230
acre  ac1     600          50
      ac2      25         110

推荐阅读