python - 按特定顺序对数据框中的值进行排序和排列
问题描述
我在数据框中有以下数据
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
解决方案
创建一个临时列来设置自定义顺序: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
推荐阅读
- android-recyclerview - 卡片堆栈刷卡 - 刷卡(移除)顶部卡片后在背面添加卡片
- tokenize - 词法分析/标记化分隔字符串
- python - 对除当前值之外的所有值执行交叉转换
- c++ - 为什么派生类的构造函数要在C++中初始化虚基类?
- jquery - DataTables jQuery: how to search using the value of the cells and not based from the value that is being rendered?
- c# - 如何在控制器中重载任务 - MVC
- wpf - ComboBox MultiBinding如何绑定到SelectedItem的属性
- python - 如何使用python切换列表中的玩家?
- android - 关于 Android Studio 和 Flutter Inspector
- flutter - Flutter ListView 重置到列表顶部