是否可以通过列的值以及索引对pandas进行排序?
如果你按列的值对pandas的索引框进行排序,你可以得到按列排序的结果索引框,但不幸的是,你会看到在一个排序列的同一个值中,索引框的顺序很乱。
那么,我是否可以按列对一个数组进行排序,比如名为count
的列,但也可以按index的值进行排序?是否也可以按降序对一个列进行排序,而按升序对一个索引进行排序?
我知道如何在XML中对多个列进行排序,也知道我可以通过首先reset_index()
索引并对其进行排序,然后再次创建索引来实现我在这里要求的内容。但是,这是更直观和有效的方法吗?
6条答案
按热度按时间kr98yfug1#
Pandas 0.23终于让你到达那里:-D
现在可以将索引名(而不仅仅是列名)作为参数传递给
sort_values
。所以,这一行代码可以工作:字符串
如果您的索引当前未命名:
型
uelo1irk2#
**在pandas 0.23+中,你可以直接这样做-参见OmerB的answer。**如果你还没有0.23+,请继续阅读。
我敢说,最简单的方法是将索引复制到一个列,然后按两者排序。
字符串
我也希望能够只做像
df.sort(['count', 'index'])
这样的东西,但当然这不起作用。vi4fp9gy3#
Pandas版本0.22。
您可以临时将列设置为索引,对该列的索引进行排序,然后重置。默认情况下,它将保持现有索引的顺序:
字符串
我认为上面的可以用“原地”选项来完成,但我认为上面的更容易阅读。
a1o7rhls4#
您可以在sort_index中使用升序参数,但必须将其作为列表传递,以便从pandas 0.22.0开始正确工作。
字符串
输出量:
型
按值和索引排序应得到“FRAMESORTED”而不是“SORTEDFRAME”
型
输出量:
型
注意你必须把
sort_index
中的ascending
参数作为一个列表而不是一个标量来传递。这是不起作用的。8hhllhi25#
要对列进行降序排序,同时保持索引升序:
字符串
输出量:
型
q5lcpyga6#
您可以使用groupby和apply的组合:
字符串
我在最后一行中删除了“Location”,因为groupby将分组级别插入到索引的第一个位置。排序后再删除它们将保持排序顺序。