Pandas DF根据匹配的单元格名称合并

Pandas DF merge based on matching cell name

我有一个数据框 DF1,其中包含:

Asset Name Type Score Grade
Apple fruit nan nan
Pear fruit nan nan
Banana fruit nan nan

我有 DF2,其中包含:
Asset Name Score Grade
Orange 40 C
Banana 100 A
Pear 60 B
Potato 10 F
Apple 70 E
import pandas as pd

data1 = {'Asset Name':['Apple', 'Pear', 'Banana'], \
         'Type':['fruit', 'fruit', 'fruit'],'Score':['nan', 'nan','nan'], \
             'Grade':['nan','nan','nan']}

data2 = {'Asset Name':['Orange', 'Banana','Pear','Potato','Apple'], \
         'Score':[40,100,60,10,70], 'Grade':['C','A','B','F','E']}
    
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

我可以使用:

combined = pd.concat([DF1, Df2]).groupby('Asset Name').first()

这给了我以下信息:

Asset Name Score Grade Type
Apple 70 E fruit
Banana 100 A fruit
Orange 40 C None
Pear 60 B fruit
Potato 10 F None

这不是我想要的。我只想添加 Apple、Pear 和 Banana 的分数和等级,因为它们在 DF1 中。如果资产名称不在 DF1 和 Df2 中,则不应更新分数和等级。


同样,如果我尝试使用:

combined = df2.combine_first(df1)

Asset Name Grade Score Type
Orange C 70 fruit
Banana A 100 fruit
Pear B 40 fruit
Potato F 10 fruit
Apple E 70 None

我得到了我也不想要的元素,因为我只想更新 DF1 中的元素。

如何只更新 DF1 中与 DF2 中的 'Asset Name' 匹配的行,并将 DF2 中的数据添加到 DF1 中的那些资产?


我想实现的是:

Asset Name Score Grade Type
Apple 70 C fruit
Pear 60 B fruit
Banana 100 A fruit

谢谢

IIUC 使用:

df = df2.set_index('Asset Name').combine_first(df1.set_index('Asset Name')).dropna().reset_index()
print (df)
  Asset Name Grade Score   Type
0      Apple     E    70  fruit
1     Banana     A   100  fruit
2       Pear     B    60  fruit