首页 > 解决方案 > 熊猫匹配元素

问题描述

我有一个名为 df1 的数据库和一个名为 df2 的工作表。</p>

我想用 pandas 的 df1 填充 df2。</p>

DF1:

    name    SCORE   height  weight  
1   JACK    66      150     100  
2   PAUL    50      165      22  
3   MLKE    30      132      33  
4   Meir    20      110      20  
5   Payne   10      175      21  

DF2:

    name    SCORE   height  weight
1   JACK            
2   PAUL            
3   MLKE            

*名字可能会打乱顺序

我的错误代码:

import openpyxl
import pandas as pd
df1 = pd.DataFrame(pd.read_excel('df1.xlsx',sheet_name =0))
df2 = pd.DataFrame(pd.read_excel('df2.xlsx',sheet_name = 0))

result = df1.merge(df2,on = ['NAME'],how="left")

DF1: 在此处输入图像描述

预期结果:

DF2:

    name    SCORE   height  weight
1   JACK    66      150     100
2   PAUL    50      165     22
3   MLKE    30      132     33

标签: pythonpandas

解决方案


如您所述,name可能会弄乱顺序,因此,如果要使用df1to fill-up df2,可以尝试name在两者中设置为 indexdf1然后df2使用.update(),如下所示:

df1a = df1.set_index('name')
df2a = df2.set_index('name')

df2a.update(df1a)
df2 = df2a.reset_index()

结果:

(使用df1基于底部附近图片的数据):

print(df2)

   name SCORE height weight
0  JACK    66    150    100
1  PAUL    50    165     22
2  MLKE    30    132     33

如果要保留原来的行索引df2,可以先保存索引,以后再恢复,如下:

df1a = df1.set_index('name')
df2a = df2.set_index('name')
df2a.update(df1a)

df2_idx = df2.index
df2 = df2a.reset_index()
df2.index = df2_idx

结果:

print(df2)

   name SCORE height weight
1  JACK    66    150    100
2  PAUL    50    165     22
3  MLKE    30    132     33

推荐阅读