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