python-3.x - 根据Python中另一个数据框的列对一个数据框的行(有重复的列)进行排序
问题描述
我有两个数据框df1
和df2
. 我想按列 dataframe的顺序df1
基于列SET
(SET
列重复但其他列不重复)进行排序。SETf
df2
df1
:-
SET Date cust_ID TYPE amt total flag LEVEL
A 6/10/2019 113252981 R 1317 16237 Y 3
C 6/18/2019 112010871 R 4582 12455 Y 2
B 6/22/2019 204671333 S 2364 24311 Y 1
B 6/22/2019 202770598 S 4721 10582 Y 1
B 6/22/2019 202706466 S 1904 25343 N 2
B 6/22/2019 202669668 S 3713 25166 N 1
B 6/22/2019 202754932 T 4792 16888 Y 2
D 6/7/2019 120304631 P 4968 25297 Y 2
D 6/7/2019 112353651 P 1622 14384 Y 3
D 6/7/2019 112349221 P 4721 15878 Y 3
D 6/8/2019 111197161 P 4490 25489 N 2
E 6/8/2019 137049981 Q 4409 10842 Y 2
A 6/8/2019 137281821 Q 1060 24085 Y 2
C 6/8/2019 136390501 Q 1649 13626 N 2
C 6/9/2019 136326431 Q 3822 13599 N 2
df2
:-
s_no SETf
1 B
2 D
3 C
4 A
5 E
我想df1
根据 的相同顺序对SETf
的行进行排序df2
。
我尝试了什么:-
df1 =df1.set_index('SET')
df1= df1.reindex(df2.index['SETf'])
df1= df1.reset_index()
它不起作用,因为我在SET
中有重复项df1
。除了这样做之外,我还想根据LEVEL
ascending
每个SET
和flag
解决方案
在您的第二个数据框中,如果您的s_no
列是唯一的并且升序 [1、2、3、4 等],则创建,然后合并两个数据框并按s_no
您合并的列排序,然后将其删除:
df1 = pd.merge(df1, df2[['SETf', 's_no']].rename({'SETf':'SET'}, axis=1), how='left',on='SET')
df1 = df1.sort_values(['s_no', 'flag', 'LEVEL']).drop('s_no', axis=1)
df1
Out[490]:
SET Date cust_ID TYPE amt total flag LEVEL
5 B 6/22/2019 202669668 S 3713 25166 N 1
4 B 6/22/2019 202706466 S 1904 25343 N 2
2 B 6/22/2019 204671333 S 2364 24311 Y 1
3 B 6/22/2019 202770598 S 4721 10582 Y 1
6 B 6/22/2019 202754932 T 4792 16888 Y 2
10 D 6/8/2019 111197161 P 4490 25489 N 2
7 D 6/7/2019 120304631 P 4968 25297 Y 2
8 D 6/7/2019 112353651 P 1622 14384 Y 3
9 D 6/7/2019 112349221 P 4721 15878 Y 3
13 C 6/8/2019 136390501 Q 1649 13626 N 2
14 C 6/9/2019 136326431 Q 3822 13599 N 2
1 C 6/18/2019 112010871 R 4582 12455 Y 2
12 A 6/8/2019 137281821 Q 1060 24085 Y 2
0 A 6/10/2019 113252981 R 1317 16237 Y 3
11 E 6/8/2019 137049981 Q 4409 10842 Y 2
推荐阅读
- java - 从 github eclipse 克隆后的 java.lang.ClassNotFoundException
- php - 使 PHP url 具有独特的格式
- python - 在 Azure 数据科学 VM 上启用 Cuda
- c# - 如何检测添加、删除或更改字体的时间?
- c# - 无法根据条件获取产品名称
- python - 如何使用正则表达式提取文本文件中的特定值并将提取的值保存在另一个文件中?
- c# - c# 翻转列表
转换成字符串并在 Windows 窗体应用程序的标签中显示 - javascript - 固定标题滚动
- python-3.x - device.is_kernel_driver_active() 在 libusb-1.0.22.7z 中不起作用吗?
- reactjs - 使用参数时,React Router Render props 不渲染组件