【问题标题】:Pandas MultiIndex DataFrame SortingPandas MultiIndex DataFrame 排序
【发布时间】:2020-04-11 22:49:03
【问题描述】:

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

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

任何帮助将不胜感激

【问题讨论】:

    标签: python pandas dataframe sorting


    【解决方案1】:

    您可以将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
    

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 2016-12-01
      • 2016-03-05
      • 1970-01-01
      • 2019-05-20
      • 2017-08-25
      • 2016-11-06
      • 2018-08-22
      • 2017-03-28
      相关资源
      最近更新 更多