Python/Pandas-如何仅保留外部联接的父数据帧?

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

实际数据有更多的字段,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
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