根据列和索引的值对pandas数据框进行排序?

2024-06-25 22:39:29 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以根据列的值以及索引对pandas数据帧进行排序?

如果按列的值对pandas数据帧进行排序,则可以得到按列排序的结果数据帧,但不幸的是,在排序列的同一个值内,您会看到数据帧索引的顺序混乱。

所以,我可以按列(例如名为count的列)对数据帧进行排序,但也可以按索引值对其进行排序吗?按降序对列进行排序是否可行,但按升序对索引进行排序是否可行?

我知道如何对dataframe中的多个列进行排序,也知道可以通过首先对索引进行reset_index()排序,然后再次创建索引来实现我的要求。但这样做是否更直观、更有效呢?


Tags: 数据dataframepandasindex排序顺序count序列
3条回答

在pandas 0.23+中,您可以直接执行-请参阅OmerB的answer如果您还没有0.23+,请继续阅读。


我敢说,最简单的方法就是将索引复制到列上,然后按两者排序。

df['colFromIndex'] = df.index
df = df.sort(['count', 'colFromIndex'])

我也希望能够做一些类似df.sort(['count', 'index'])的事情,但这当然行不通。

熊猫0.23终于让你到了-D

现在可以将索引名(而不仅仅是列名)作为参数传递给sort_values。所以,这一行是有效的:

df = df.sort_values(by = ['MyCol', 'MyIdx'], ascending = [False, True])

如果索引当前未命名:

df = df.rename_axis('MyIdx').sort_values(by = ['MyCol', 'MyIdx'], ascending = [False, True])

从pandas版本0.22开始。

可以临时将列设置为索引,对该列上的索引排序,然后重置。默认情况下,它将保持现有索引的顺序:

df = df.set_index('column_name', append=True).sort_index(level=1).reset_index(level=1)

我认为以上可以通过“就地”选项来完成,但我认为如上所述更容易阅读。

相关问题 更多 >