Python/Pandas-如何仅保留外部联接的父数据帧?
实际数据有更多的字段,df1上的字段更少,df2上的字段更多。有些列的名称略有不同Python/Pandas-如何仅保留外部联接的父数据帧?,python,pandas,dataframe,join,merge,Python,Pandas,Dataframe,Join,Merge,实际数据有更多的字段,df1上的字段更少,df2上的字段更多。有些列的名称略有不同 # intialise data of lists. data1 = {'NameA':['Tom', 'Nick', 'Krish', 'Jack'], 'AgeA':[20, 21, 19, 18]} data2 = {'NameB':['Tom', 'Nick', 'C', 'D'], 'AgeB':[20, 21, 3, 4]} # Create DataFrame df
# intialise data of lists.
data1 = {'NameA':['Tom', 'Nick', 'Krish', 'Jack'],
'AgeA':[20, 21, 19, 18]}
data2 = {'NameB':['Tom', 'Nick', 'C', 'D'],
'AgeB':[20, 21, 3, 4]}
# Create DataFrame
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
list = [df1, df2]
df1 = pd.merge(df1,df2,how='left',left_on=['NameA','AgeA'],right_on=['NameB','AgeB'])
print(df1)
输出=
NameA AgeA NameB AgeB
0 Tom 20 Tom 20.0
1 Nick 21 Nick 21.0
2 Krish 19 NaN NaN
3 Jack 18 NaN NaN
期望=
我在使用Pandas/Python实现左连接时遇到困难,只留下父表。有人有什么建议吗?谢谢。解决方案,带有
左连接
和参数指示器
:
具有外部联接的解决方案:
df3 = pd.merge(df1,df2,how='outer',left_on=['NameA','AgeA'],right_on=['NameB','AgeB'], indicator=True)
print(df3)
NameA AgeA NameB AgeB _merge
0 Tom 20.0 Tom 20.0 both
1 Nick 21.0 Nick 21.0 both
2 Krish 19.0 NaN NaN left_only
3 Jack 18.0 NaN NaN left_only
4 NaN NaN C 3.0 right_only
5 NaN NaN D 4.0 right_only
df = df3.loc[df3['_merge'].eq('left_only'), df1.columns]
print (df)
NameA AgeA
2 Krish 19.0
3 Jack 18.0
啊,我是说左外联,但你知道问题的要点了。谢谢大家!@匿名-谢谢,很乐意帮忙。如果适合你,别忘了接受答案!:)
df3 = pd.merge(df1,df2,how='outer',left_on=['NameA','AgeA'],right_on=['NameB','AgeB'], indicator=True)
print(df3)
NameA AgeA NameB AgeB _merge
0 Tom 20.0 Tom 20.0 both
1 Nick 21.0 Nick 21.0 both
2 Krish 19.0 NaN NaN left_only
3 Jack 18.0 NaN NaN left_only
4 NaN NaN C 3.0 right_only
5 NaN NaN D 4.0 right_only
df = df3.loc[df3['_merge'].eq('left_only'), df1.columns]
print (df)
NameA AgeA
2 Krish 19.0
3 Jack 18.0