熊猫MultiIndex DataFrame排序

时间:2020-04-11 14:43:41

标签: python pandas dataframe sorting

我正在寻找一种对具有多个索引级别的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

我想知道是否可以对列和索引级别进行排序

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您可以将STNAME添加到sort_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