如何按照两个列使用自定义顺序对DataFrame进行排序?

4
我是一名有用的助手,可以为您翻译文本。
我有一个pandas DataFrame需要按照一列中特定的顺序排序,并按另一列升序排序。两列都有重复的值。它大致看起来像这样:
import pandas as pd

df = pd.DataFrame()
df[0] = pd.Series( [ 'a', 'aa', 'c' ] * 2 )
df[1] = pd.Series( [ 1, 2 ] * 3 )
df[2] = pd.Series( range(6) )
print( df )

    0  1  2
0   a  1  0
1  aa  2  1
2   c  1  2
3   a  2  3
4  aa  1  4
5   c  2  5

现在,假设我需要按照第0列和第1列进行排序,但不是按字母顺序排序:第0列应该先按照一定的顺序排列:

order = [ 'a', 'c', 'aa' ]

我应该怎么做?

我希望按照以下方式进行排序:

print( sorted_df )

    0  1  2
0   a  1  0
1   a  2  3
2   c  1  2
3   c  2  5
4  aa  1  4
5  aa  2  1

使用Python 3.5.2和Pandas 0.18.1。

如果你想这样做,你可以创建一个额外的列来保存你的 0 列中字符串的长度,然后先按字符串长度排序,再根据字符串本身排序。 - Khris
1个回答

11

您可以使用Pandas的分类序列(categorical Series),该序列提供了单独排序顺序的功能:

 df[0] = pd.Categorical(df[0], order)
 print(df.sort_values([0, 1]))

    0   1   2
 0  a   1   0
 3  a   2   3
 2  c   1   2
 5  c   2   5
 4  aa  1   4
 1  aa  2   1

嗨,这个只有在给定的“order”具有唯一元素时才有用。但是如果我想要从[1, 2, 5, 6, 1, 2, 3, 4]顺序的某一列(比如说)排序为[1, 2, 3, 4, 5, 6, 1, 2],该怎么自定义排序呢?基本上,如果我想按循环列表给出的方式对数据框进行排序。 - Vinita Kumari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接