首页 > 解决方案 > 按特定顺序对数据框中的值进行排序和排列

问题描述

我在数据框中有以下数据

Folder Name   ID     File Name        
Test          2      2_Accounts.csv      
Test          4      4_Contacts.csv         
Test          2      2_Contacts.csv
Test          4      4_Accounts.csv
Test          4      4_Leads.csv
Test          2      2_Leads.csv
Test          2      2_Opps.csv
Test          4      4_Opps.csv

我首先需要按 ID 排序,以便将具有相同值的 ID 分组在一起。我做了以下

df = df.sort_values("ID")
Folder Name   ID     File Name        
Test          2      2_Leads.csv    
Test          2      2_Accounts.csv         
Test          2      2_Contacts.csv
Test          2      2_Opps.csv
Test          4      4_Accounts.csv
Test          4      4_Opps.csv
Test          4      4_Leads.csv
Test          4      4_Contacts.csv

接下来我需要在groups(id)中进行排序,“联系人”应该排在第一位,“帐户”应该排在第二位,其余的可以按任何顺序排列

应该输出应该是这样的

Folder Name   ID     File Name        
Test          2      2_Contacts.csv      
Test          2      2_Accounts.csv         
Test          2      2_Opps.csv
Test          2      2_Leads.csv
Test          4      4_Contacts.csv
Test          4      4_Accounts.csv
Test          4      4_Leads.csv
Test          4      4_Opps.csv

标签: pythonpandassorting

解决方案


创建一个临时列来设置自定义顺序:0 -> 联系人,1 -> 帐户,* -> 其余

df['order'] = df['File Name'].replace({r'Contact': 0,
                                       r'Accounts': 1,
                                       r'.*': 2}, regex=True)

out = df.sort_values(['ID', 'order']).drop(columns='order')
>>> out
  Folder Name  ID       File Name
2        Test   2  2_Contacts.csv
0        Test   2  2_Accounts.csv
5        Test   2     2_Leads.csv
6        Test   2      2_Opps.csv
1        Test   4  4_Contacts.csv
3        Test   4  4_Accounts.csv
4        Test   4     4_Leads.csv
7        Test   4      4_Opps.csv

推荐阅读