2014-04-24 25 views
7

ile sıralama Ben İsimle ilk Kritikliğini tarafından ve daha sonra sıralamak istiyorum aşağıdaki dataframe: Bu this post sağlanan cevabı kullanarak ama sadece benim yapmaya çalıştığım ettikÖzel Pandalar

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

işe yaramaz. Bu

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

Gönderdiğiniz sonuçlara dayanarak, öncelikle önce Ad, sonra Kritiklik'e göre sıralamak istediğinizi düşünüyorum. Sağ? – exp1orer

+0

@ exp1orer evet, ancak harici bir sıralamayı kullanmadan, istenen çıktı olan – EdChum

+0

EdChum değil, kritik olarak alfa sıralama ile sonuçlanırsınız. Sadece sordum çünkü onun sorusu "önce Kritiklik ve sonra İsim ile sıralamak" istediğini söylüyor. ama örnek çıktı aksi yönde. – exp1orer

cevap

18

Bir yaklaşım, bir 'taban' sütununu oluşturmak için özel bir dicti kullanmak olacaktır gibi

Sonuçta olmalı, biz o zaman ile sıralamak sonra sıraladıktan sonra sütun bırakın kullanın:

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

Çok teşekkürler, bu bir çekicilik gibi çalışır! – Blark