首页 > 解决方案 > 如何同时对两个DataFrame进行排序

问题描述

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

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

标签: python-3.xpandas

解决方案


根据 second 的列对第一个数据帧的列进行排序,其中第二个用整数映射,然后 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

推荐阅读