我有一个 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
最佳答案
您可以为此目的使用 pandas 的分类系列,它提供了单独排序顺序的功能:
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
关于python - 如何使用自定义顺序按两列对 DataFrame 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42436225/