首页 > 解决方案 > 将数据框的内容复制到具有相同行和列的另一个数据框

问题描述

我需要将具有多列的数据框逐行转换为“排名顺序”表。这是我的测试数据:

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() 但对于大型数据集来说它很昂贵。这里有熊猫福可以做到这一点吗?

标签: pythonpandasdataframe

解决方案


如果我的理解正确:如果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

推荐阅读