2014-04-24 2 views
7

으로 정렬 I가 내가 이름으로 최초의 중요도에 의해 다음 정렬하고 싶은 다음 dataframe :이 this post에서 제공하는 답을 사용하지만, 그냥 내가 할 노력했습니다사용자 정의 팬더

Name  Criticality 
baz   High 
foo   Critical 
baz   Low 
foo   Medium 
bar   High 
bar   Low 
bar   Medium 
... 

그것을 작동시키지 못한다. 이

Name  Criticality 
bar   High 
bar   Medium 
bar   Low 
baz   High 
baz   Low 
foo   Critical 
foo   Medium 
+0

게시 된 최종 결과를 기반으로, 실제로 이름순으로 정렬 한 다음 중요도로 정렬하려고합니다. 권리? – exp1orer

+0

@ exp1orer 예. 외부 주문을 사용하지 않고 원하는 출력이 아닌 Criticality에서 알파 정렬을 수행합니다. – EdChum

+0

EdChum, 완전히 적합합니다. 나는 그의 질문이 그가 "중요성에 의해 우선적으로 그리고 그 다음에 이름순으로"분류되기를 원한다고 말했기 때문에 나는 물었다. 그러나 견본 산출은 다르게 제안한다. – exp1orer

답변

18

한 가지 방법은 '계급'열을 생성하는 사용자 정의 딕셔너리를 사용하는 것처럼

최종 결과가 있어야한다, 우리는 다음과 정렬 한 후 정렬 후 열을 삭제하는 데 사용 :

In [17]: 
custom_dict = {'Critical':0, 'High':1, 'Medium':2, 'Low':3} 
df['rank'] = df['Criticality'].map(custom_dict) 
df 

Out[17]: 

    Name Criticality rank 
0 baz  High  1 
1 foo Critical  0 
2 baz   Low  3 
3 foo  Medium  2 
4 bar  High  1 
5 bar   Low  3 
6 bar  Medium  2 

[7 rows x 3 columns] 

In [19]: 
# now sort by 'Name' and 'rank', it will first sort by 'Name' column first and then 'rank' 
df.sort(columns=['Name', 'rank'],inplace=True) 
df 

Out[19]: 

    Name Criticality rank 
4 bar  High  1 
6 bar  Medium  2 
5 bar   Low  3 
0 baz  High  1 
2 baz   Low  3 
1 foo Critical  0 
3 foo  Medium  2 

[7 rows x 3 columns] 

In [21]: 
# now drop the 'rank' column 
df.drop(labels=['rank'],axis=1) 

Out[21]: 

    Name Criticality 
4 bar  High 
6 bar  Medium 
5 bar   Low 
0 baz  High 
2 baz   Low 
1 foo Critical 
3 foo  Medium 

[7 rows x 2 columns] 
+0

대단히 고마워,이 작품은 매력처럼! – Blark