python - 将数据框的内容复制到具有相同行和列的另一个数据框
问题描述
我需要将具有多列的数据框逐行转换为“排名顺序”表。这是我的测试数据:
raw = [{'MS':100, 'KR':1, 'KU': 0.1, 'BR': 33},
{'MS':9, 'KR':4, 'KU': 0.4, 'BR': 40},
{'MS':40, 'KR':6, 'KU': 0.2, 'BR': 50},
{'MS':59, 'KR':3, 'KU': 0.4, 'BR': 30},
{'MS':33, 'KR':8, 'KU': 0.5, 'BR': 20},
{'MS':40, 'KR':2, 'KU': 0.2, 'BR': 90},
{'MS':70, 'KR':2, 'KU': 0.01, 'BR': 80},
]
raw_df = pd.DataFrame(raw, index=['A','B','C','D','E','F','G'])
基本上我需要从这里开始:
MS KR KU BR
A 100 1 0.10 33
B 9 4 0.40 40
C 40 6 0.20 50
D 59 3 0.40 30
E 33 8 0.50 20
F 40 2 0.20 90
G 70 2 0.01 80
到这里(最高的原始值排名更高):
MS KR KU BR
C 40 6 0.20 50
E 33 8 0.50 20
D 59 3 0.40 30
F 40 2 0.20 90
B 9 4 0.40 40
G 70 2 0.01 80
A 100 1 0.10 33
我对每一列进行了排名,然后通过取平均值创建了一个行排名,然后按该新行对数据框进行排序。现在我有以下排名数据框,但我需要用旧的原始数据而不是当前数据复制内容。
MS KR KU BR rank
C 4.5 2.0 4.5 3.0 3.500
E 6.0 1.0 1.0 7.0 3.750
D 3.0 4.0 2.5 6.0 3.875
F 4.5 5.5 4.5 1.0 3.875
B 7.0 3.0 2.5 4.0 4.125
G 2.0 5.5 7.0 2.0 4.125
A 1.0 7.0 6.0 5.0 4.750
我可以使用 iterrrow() 但对于大型数据集来说它很昂贵。这里有熊猫福可以做到这一点吗?
解决方案
如果我的理解正确:如果df_rank
包含您的排序数据框和未排序的数据框raw_df
,您可以执行以下操作:
print(raw_df.loc[df_rank.index])
印刷:
MS KR KU BR
C 40 6 0.20 50
E 33 8 0.50 20
D 59 3 0.40 30
F 40 2 0.20 90
B 9 4 0.40 40
G 70 2 0.01 80
A 100 1 0.10 33
推荐阅读
- ios - os_log 在新 Xcode 13 的 Xcproject 旧版本中不起作用
- python - 删除 Matplotlib 绘图之间的水平空白
- variables - Compact-u16 - 这样做的目的是什么?
- python - 简单的时间序列线性回归
- excel - VBA For Loop - 如果行包含字符,则将某些输入添加到单元格?
- python - 如何断言成员调用?
- swift - AVSpeechUtterance 10% 步率变化
- postgresql - 将 psycopg2 查询结果写入 pyspark 数据帧
- php - SugarCRM - 使用 API v10 创建 CommentLog
- javascript - 如何从 iframe 内容中的 div 中删除类