排序多索引数据框保持索引排序
Posted
技术标签:
【中文标题】排序多索引数据框保持索引排序【英文标题】: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)
【问题讨论】:
【参考方案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 将排在顶部以上是关于排序多索引数据框保持索引排序的主要内容,如果未能解决你的问题,请参考以下文章