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

标签 python sorting pandas dataframe

我有一个 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/

相关文章:

c++ - 如何按元素出现次数将多重集排序到容器

python - Pandas 广泛的 'describe' 包括计算空值

python - 从 itertools 组合列表结果中删除括号

python - 查找开头和结尾之间且带有分隔符的所有重复字符串

objective-c - 按对象的 NSDate 属性对对象数组进行排序

java - Java 中的链表排序

Pandas 数据框用日期列填充缺失的行

python - Pandas - 通过优先级从列中减去

python - 是否可以使用 PyUSB 通过 USB 端口获取 USB 设备

python - 如何获取 TFRecord 文件中包含的条目总数?