首页 > 解决方案 > Pandas MultiIndex DataFrame 排序

问题描述

我正在寻找一种方法来对具有多个索引级别的 DataFrame 中的列进行排序。在我的 DataFrame 索引级别 0 是州名称(“STNAME”),索引级别 1 是城市名称(“CTYNAME”)。

我的初始 DataFrame 如下所示:

在:

df = census_df
df = df.set_index(["STNAME" ,"CTYNAME"])
df = df.loc[: ,["CENSUS2010POP"]]
print(df.head())

出去:

                           CENSUS2010POP
STNAME  CTYNAME 
Alabama Alabama            4779736
        Autauga County     54571
        Baldwin County     182265
        Barbour County     27457
        Bibb County        22915

但是,当我尝试对“CENSUS2010POP”列应用排序时,它会破坏所有层次结构:

在:

df = census_df
df = df.set_index(["STNAME" ,"CTYNAME"])
df = df.loc[: ,["CENSUS2010POP"]]
df = df.sort_values("CENSUS2010POP")
print (df.head())

出去:

                                CENSUS2010POP
STNAME        CTYNAME   
Texas         Loving County     82
Hawaii        Kalawao County    90
Texas         King County       286
Kenedy        County            416
Nebraska      Arthur County     460

我想知道是否有办法对列和索引级别进行排序

任何帮助将非常感激

标签: pythonpandasdataframesorting

解决方案


您可以添加STNAMEsort_values

df.sort_values(['STNAME','CENSUS2010POP'])

关于随机数据:

np.random.seed(1)
df = pd.DataFrame({
    'STNAME':[0]*4+[1]*4,
    'CTYNAME':[0,1,2,3]*2,
    'CENSUS2010POP':np.random.randint(10,100,8)
}).set_index(['STNAME', 'CTYNAME'])

输出是:

                CENSUS2010POP
STNAME CTYNAME               
0      3                   19
       1                   22
       0                   47
       2                   82
1      1                   15
       3                   74
       0                   85
       2                   89

推荐阅读