【问题标题】:How to sort in customized order in python pandas?python - 如何在python pandas中按自定义顺序排序?
【发布时间】:2016-03-23 19:40:23
【问题描述】:

我有一个以下格式的数据框

country region  measure Option1 Option2
A   R1  141 max max
A   R1  141 max min
A   R1  141 max default
A   R1  86  min max
A   R1  86  min min
A   R1  86  min default
A   R1  86  default max
A   R1  86  default min
A   R1  86  default default
A   R2  215 max max
A   R2  215 max min
A   R2  215 max default
A   R2  72  min max
A   R2  72  min min
A   R2  72  min default
A   R2  72  default max
A   R2  72  default min
A   R2  72  default default
A   R3  473 max max
A   R3  473 max min
A   R3  473 max default
A   R3  36  min max
A   R3  36  min min
A   R3  36  min default
A   R3  36  default max
A   R3  36  default min
A   R3  36  default default

使用 df.sort(['country','Option1','Option2','region']) 排序后

country region  measure Option1 Option2
A   R1  86  default default
A   R2  72  default default
A   R3  36  default default
A   R1  86  default max
A   R2  72  default max
A   R3  36  default max
A   R1  86  default min
A   R2  72  default min
A   R3  36  default min
A   R1  141 max default
A   R2  215 max default
A   R3  473 max default
A   R1  141 max max
A   R2  215 max max
A   R3  473 max max
A   R1  141 max min
A   R2  215 max min
A   R3  473 max min
A   R1  86  min default
A   R2  72  min default
A   R3  36  min default
A   R1  86  min max
A   R2  72  min max
A   R3  36  min max
A   R1  86  min min
A   R2  72  min min
A   R3  36  min min

在这里,我想专门有以下格式的订单:

country region  measure Option1 Option2
A   R1  86  min min
A   R2  72  min min
A   R3  36  min min
A   R1  86  min max
A   R2  72  min max
A   R3  36  min max
A   R1  86  min default
A   R2  72  min default
A   R3  36  min default
A   R1  86  default min
A   R2  72  default min
A   R3  36  default min
A   R1  86  default default
A   R2  72  default default
A   R3  36  default default
A   R1  86  default max
A   R2  72  default max
A   R3  36  default max
A   R1  141 max min
A   R2  215 max min
A   R3  473 max min
A   R1  141 max default
A   R2  215 max default
A   R3  473 max default
A   R1  141 max max
A   R2  215 max max
A   R3  473 max max

谁能帮助我实现这种自定义的行顺序?

【问题讨论】:

  • 对不起,您需要定义排序标准,这不是骗人的吗:stackoverflow.com/questions/23279238/custom-sorting-with-pandas
  • Edchum,它与另一个问题几乎相同。我这里只有 2 列,Option2 中存在细微变化。会调查它。谢谢。
  • 我的评论仍然认为您需要定义排序标准,仅显示结果并不足以解释,例如Option1Option2的排序标准是什么
  • 我没有在此处发布并在其他一些问题中进​​行了解释,这很糟糕。它是 1.min 2.default 和 3.max.Got 它在另一个示例之后工作,在 Option2 中有一个小例外min 它是 min、max 和默认值。

标签: python pandas


【解决方案1】:

您可以使用sorted Categorical,但在Option2 列中是否不同,仍然是minmaxdefault

d3['Option1'] = pd.Categorical(d3['Option1'],['min','default','max'], ordered=True)
d3['Option2'] = pd.Categorical(d3['Option2'],['min','max','default'], ordered=True)
d3 = d3.sort_values(['country','Option1', 'Option2' ])
print d3
   country region  measure  Option1  Option2
4        A     R1       86      min      min
13       A     R2       72      min      min
22       A     R3       36      min      min
3        A     R1       86      min      max
12       A     R2       72      min      max
21       A     R3       36      min      max
5        A     R1       86      min  default
14       A     R2       72      min  default
23       A     R3       36      min  default
7        A     R1       86  default      min
16       A     R2       72  default      min
25       A     R3       36  default      min
6        A     R1       86  default      max
15       A     R2       72  default      max
24       A     R3       36  default      max
8        A     R1       86  default  default
17       A     R2       72  default  default
26       A     R3       36  default  default
1        A     R1      141      max      min
10       A     R2      215      max      min
19       A     R3      473      max      min
0        A     R1      141      max      max
9        A     R2      215      max      max
18       A     R3      473      max      max
2        A     R1      141      max  default
11       A     R2      215      max  default
20       A     R3      473      max  default
31       B     R1       79      min      min
40       B     R2       88      min      min
49       B     R3       54      min      min
30       B     R1      384      min      max
39       B     R2      439      min      max
48       B     R3      172      min      max
32       B     R1       79      min  default
41       B     R2       88      min  default
50       B     R3       54      min  default
34       B     R1       79  default      min
43       B     R2       88  default      min
52       B     R3       54  default      min
33       B     R1      384  default      max
42       B     R2      439  default      max
51       B     R3      172  default      max
35       B     R1       79  default  default
44       B     R2       88  default  default
53       B     R3       54  default  default
28       B     R1       79      max      min
37       B     R2       88      max      min
46       B     R3       54      max      min
27       B     R1      384      max      max
36       B     R2      439      max      max
45       B     R3      172      max      max
29       B     R1       79      max  default
38       B     R2       88      max  default
47       B     R3       54      max  default

或者:

d3['Option1'] = pd.Categorical(d3['Option1'],['min','default','max'], ordered=True)
d3['Option2'] = pd.Categorical(d3['Option2'],['min','default','max'], ordered=True)
d3 = d3.sort_values(['country','Option1', 'Option2' ])
print d3

   country region  measure  Option1  Option2
4        A     R1       86      min      min
13       A     R2       72      min      min
22       A     R3       36      min      min
5        A     R1       86      min  default
14       A     R2       72      min  default
23       A     R3       36      min  default
3        A     R1       86      min      max
12       A     R2       72      min      max
21       A     R3       36      min      max
7        A     R1       86  default      min
16       A     R2       72  default      min
25       A     R3       36  default      min
8        A     R1       86  default  default
17       A     R2       72  default  default
26       A     R3       36  default  default
6        A     R1       86  default      max
15       A     R2       72  default      max
24       A     R3       36  default      max
1        A     R1      141      max      min
10       A     R2      215      max      min
19       A     R3      473      max      min
2        A     R1      141      max  default
11       A     R2      215      max  default
20       A     R3      473      max  default
0        A     R1      141      max      max
9        A     R2      215      max      max
18       A     R3      473      max      max
31       B     R1       79      min      min
40       B     R2       88      min      min
49       B     R3       54      min      min
32       B     R1       79      min  default
41       B     R2       88      min  default
50       B     R3       54      min  default
30       B     R1      384      min      max
39       B     R2      439      min      max
48       B     R3      172      min      max
34       B     R1       79  default      min
43       B     R2       88  default      min
52       B     R3       54  default      min
35       B     R1       79  default  default
44       B     R2       88  default  default
53       B     R3       54  default  default
33       B     R1      384  default      max
42       B     R2      439  default      max
51       B     R3      172  default      max
28       B     R1       79      max      min
37       B     R2       88      max      min
46       B     R3       54      max      min
29       B     R1       79      max  default
38       B     R2       88      max  default
47       B     R3       54      max  default
27       B     R1      384      max      max
36       B     R2      439      max      max
45       B     R3      172      max      max    

【讨论】:

  • jezrael,我在选项 2 中指出的例外是,对于选项 1 中的 min 组合,顺序为 min、max、default,而选项 1 中的 default 和 max 则为 min、default 和 max .这是根据分配在输出中预期的顺序。但我觉得控制到那个级别可能具有挑战性。尽管如此,上述两种方法似乎都是合乎逻辑的。
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 2021-07-29
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多