2014-04-24 26 views
7

Tôi có dataframe sau đây mà tôi muốn sắp xếp đầu tiên bởi Criticality và sau đó theo Tên:Tuỳ chỉnh sắp xếp với Pandas

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

Tôi đã cố gắng để làm điều này bằng cách sử dụng câu trả lời cung cấp trong this post nhưng tôi chỉ không thể làm cho nó hoạt động.

Kết quả cuối cùng sẽ như

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

Dựa trên kết quả cuối cùng đã đăng của bạn, tôi nghĩ bạn thực sự muốn sắp xếp theo Tên trước, sau đó là Criticality. Đúng? – exp1orer

+0

@ exp1orer có nhưng không sử dụng thứ tự bên ngoài, bạn kết thúc với việc phân loại alpha trên Mức độ nghiêm trọng không phải là kết quả mong muốn – EdChum

+0

EdChum, hoàn toàn đúng. Tôi chỉ hỏi vì câu hỏi của anh ta nói rằng anh ta muốn "sắp xếp đầu tiên bởi Criticality và sau đó là Name". nhưng đầu ra mẫu gợi ý khác. – exp1orer

Trả lời

18

Một cách tiếp cận này sẽ được sử dụng một dict tùy chỉnh để tạo ra một cột chữ 'rank', chúng tôi sau đó sử dụng để sắp xếp với và sau đó thả các cột sau khi phân loại:

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

Cảm ơn rất nhiều, điều này hoạt động như một sự quyến rũ! – Blark

Các vấn đề liên quan