2016-03-23 3 views
1

У меня есть dataframe в формате нижеКак отсортировать по индивидуальному заказу в python pandas?

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 ([ 'страна', 'ОПЦИЯ1', 'option2', 'область'])

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 

Может ли кто-нибудь помочь мне с подходом к достижению этого индивидуального порядка строк?

+0

Жаль, что вы должны определите критерии сортировки, также это не обман: http://stackoverflow.com/que stions/23279238/заказ сортировочно-с-панд? – EdChum

+0

Edchum, его почти такая же проблема, как и в другом вопросе. У меня только 2 столбца здесь, и в Option2 есть небольшая переменная. Посмотрим в нее. Спасибо. – marupav

+0

Мой комментарий по-прежнему требует определения критериев сортировки, просто показывая, что результат не достаточно объясняет, например, каковы критерии порядка для «Option1» и «Option2» – EdChum

ответ

1

Вы можете использовать sorted Categorical, но в колонке Option2 он отличается, стил заказ min, max и default:

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  
+0

jezrael, исключение, указанное в Варианте 2, заключается в том, что для комбинации min в Option1 порядок минимальный, max, по умолчанию, где по умолчанию и max в Варианте 1 это мин, значение по умолчанию и максимальное. Это был ожидаемый заказ в выход по назначению. Но я чувствую, что контроль над этим уровнем может быть сложным. Тем не менее, оба вышеуказанных метода кажутся логичными. – marupav

Смежные вопросы