python-3.x - 如何同时对两个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
解决方案
根据 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
推荐阅读
- python - Python - datetime.time() 比较将 AttributeError 作为“str”对象返回
- reactjs - 如何使用 Recoil 在 React 组件之外操作全局状态?
- python - 获取 xgboost 线性模型的系数
- r - 如何融化具有多个组和空后缀的data.frame
- angular - Angular - 如何在按钮中添加金额?
- javascript - 如何根据参数插入键并在对象 es6 中更新其值
- html - 为什么会出现我网站上的图像和文字?
- powershell - 使用 Powershell 在现有节之间添加新节
- python - 计算长度为 n 的两位数字的可能组合数
- assembly - ARM中的指令写回