是否可以按列的值对pandas数据帧进行排序,还可以通过索引进行排序?
如果按列的值对pandas数据框进行排序,则可以按列对结果数据框进行排序,但不幸的是,您会看到数据框索引的顺序在排序列的相同值内混乱.
那么,我可以按列对数据框进行排序,例如命名列,count
还可以按索引值对其进行排序?是否可以按降序对列进行排序,但是按升序对索引进行排序?
我知道如何在数据框中对多个列进行排序,并且还知道我可以通过首先reset_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)
我认为以上可以通过'inplace'选项完成,但我认为它更容易阅读如上所述.
编辑 在pandas 0.23中你可以直接进行 - 参见OmerB的回答.
我敢说,最简单的方法是将索引复制到一列,然后按两者排序.
df['colFromIndex'] = df.index df = df.sort(['count', 'colFromIndex'])
我也希望能够做一些类似的事情df.sort(['count', 'index'])
,但当然这不起作用.