根据Python中另一个数据框的列对一个数据框的行(具有重复的列)进行排序

时间:2020-10-09 05:16:48

标签: python-3.x pandas dataframe

我有两个数据帧df1df2。我想根据列df1列数据帧{{1}的顺序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 的{​​{1}}的相同顺序对df1的行进行排序。

我尝试过的:-

SETf

df2

df1 =df1.set_index('SET')

它不起作用,因为我在df1= df1.reindex(df2.index['SETf'])的{​​{1}}中有重复项。除了这样做,我还想根据每个{中的df1= df1.reset_index() SET对行进行排序{1}}和df1

1 个答案:

答案 0 :(得分:3)

在第二个数据帧中,如果您的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