【问题标题】:Sorting multi index data frame keeping index sorted排序多索引数据框保持索引排序
【发布时间】:2021-08-10 19:18:19
【问题描述】:

我有一个简单的问题我想不通。

基本上我想按列过滤多索引,但保持索引排序。

原始数据框:

arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'],
          ['Captive', 'Wild', 'Captive', 'Wild']]
index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type'))
df = pd.DataFrame({'Max Speed': [100, 150, 360, 20]}, index=index)

希望输出:

标准排序“打破”了我想保留的第一级索引。

df.sort_values('Max Speed', ascending=False).sort_index(level=0)

【问题讨论】:

    标签: python pandas dataframe sorting indexing


    【解决方案1】:

    试试:

    首先通过reset_index()方法重置你的索引:

    df=df.reset_index()
    

    最后使用sort_values() 方法并将set_index() 方法链接到它:

    df=(df.sort_values(['Animal','Type','Max Speed'], ascending=[False,True,False])
     .set_index(['Animal','Type']))
    

    df的输出:

                        Max Speed
    Animal  Type    
    Parrot  Captive     360
            Wild        20
    Falcon  Captive     100
            Wild        150
    

    【讨论】:

    • 也可以使用stack 和unstack df.unstack(0).stack(0).sort_values('Animal',ascending=False,axis=1).unstack(1).stack(0) 的链,但我确信有更好的方法,也许使用reindex。
    • @Umar.H 是的,你是对的 有更好的方法....谢谢 :)
    • 这是不正确的,它只是对索引进行排序而不是值将其更改为True, True
    • 由于它是多索引,因此值也使用索引进行排序....idk 它是否适用于真实数据集,但目前它适用于 OP 提供的示例 df
    • 如果我将升序更改为True, True,则第 0 级将排序...即 Falcon 将排在顶部
    猜你喜欢
    • 2019-07-21
    • 2019-02-05
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2016-01-14
    相关资源
    最近更新 更多