Python 熊猫连接两个数据帧,并在另一个数据帧中不存在某些行时保留来自一个数据集的数据

Python 熊猫连接两个数据帧,并在另一个数据帧中不存在某些行时保留来自一个数据集的数据,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,df1和df2 import pandas as pd df1 = pd.DataFrame([["name_"+str(i) for i in range(10)], list(range(10))]).transpose() df1.columns = ["Name", "Score"] df2 = pd.DataFrame([["name_"+str(i) for i in range(2,7)], list(range(12,17))]).transpose() df

我有两个数据帧,
df1
df2

import pandas as pd

df1 = pd.DataFrame([["name_"+str(i) for i in range(10)], list(range(10))]).transpose()
df1.columns = ["Name", "Score"]

df2 = pd.DataFrame([["name_"+str(i) for i in range(2,7)], list(range(12,17))]).transpose()
df2.columns = ["Name", "Score"]
我想加入数据帧,以便
df1
中的所有行都出现在结果中,但是无论
df1
中的
Name
值出现在
df2
中,结果都应该包含
df2
中的值。本质上,我想用
df2
中的值更新
df1
,只要
Name
匹配

这就是我要找的

     Name  Score
0  name_0      0
1  name_1      1
2  name_2     12
3  name_3     13
4  name_4     14
5  name_5     15
6  name_6     16
7  name_7      7
8  name_8      8
9  name_9      9
是否有一种方法可以使用联接操作执行此操作。我可以通过赋值操作来实现这一点

df1.loc[df1['Name'].isin(df2['Name']), "Score"] = df2["Score"].values
有没有一种方法可以使用联接操作来实现这一点?

一个想法是使用:


有没有一种方法可以使用联接操作来实现这一点

是的,您可以合并在一起,然后用和替换缺少的值,用于提取列:

df = df1.join(df2.set_index('Name'), on='Name', lsuffix='_')
#merge alternative
#df = df1.merge(df2, on='Name', how='left', suffixes=('_', ''))
df['Score'] = df['Score'].fillna(df.pop('Score_'))
print (df)
     Name  Score
0  name_0      0
1  name_1      1
2  name_2     12
3  name_3     13
4  name_4     14
5  name_5     15
6  name_6     16
7  name_7      7
8  name_8      8
9  name_9      9
df = df1.join(df2.set_index('Name'), on='Name', lsuffix='_')
#merge alternative
#df = df1.merge(df2, on='Name', how='left', suffixes=('_', ''))
df['Score'] = df['Score'].fillna(df.pop('Score_'))
print (df)
     Name  Score
0  name_0      0
1  name_1      1
2  name_2     12
3  name_3     13
4  name_4     14
5  name_5     15
6  name_6     16
7  name_7      7
8  name_8      8
9  name_9      9