如何同时对两个DataFrame进行排序

时间:2019-09-02 18:28:44

标签: python-3.x pandas

我有一个数据框存储了数字数据,另一个数据框是类别。但是,我想同时对两个数据框进行排序。

df_A中的每个条目都可以映射到df_B。作为df_A存储数字数据,而作为df_B存储其类别。因此,最终,我想重建一个新的数据框,使其具有一个数据框来存储每个类别的数字数据。我能想到的是同时对df_A和df_B进行排序,然后重命名df_A的索引。

>>print (df_A)
    26   27   28   33
3  0.9  1.0  0.4  0.0
4  1.0  0.8  1.0  0.4
5  0.9  1.0  1.0  0.9

>>print (df_B)
   26  27  28  33
3  BL  LP  PE  BL
4  PE  BL  LP  PE
5  LP  PE  BL  LP

预期结果:

    26    27   28  33
BL  0.9  0.8  1.0  0.0  
PE  1.0  1.0  0.4  0.8 
LP  0.9  1.0  1.0  0.9

1 个答案:

答案 0 :(得分:1)

根据第二个数据的列对第一个数据帧的列进行排序,第二个数据列用整数映射,然后argsort返回值的索引位置。按该顺序查询第一个值。

>>> order = {'BL': 0, 'PE': 1, 'LP': 2}
>>> df_A.apply(lambda x: list(x.iloc[df_B[x.name].map(order).argsort()]))
    26   27   28   33
3  0.9  0.8  1.0  0.0
4  1.0  1.0  0.4  0.4
5  0.9  1.0  1.0  0.9

>>> df.index = order.keys()
>>> df
     26   27   28   33
BL  0.9  0.8  1.0  0.0
PE  1.0  1.0  0.4  0.4
LP  0.9  1.0  1.0  0.9