我一直在尝试在python中实现左外连接。我看到左连接和左外连接之间存在细微差别。
在此链接中:LEFT JOIN vs. LEFT OUTER JOIN in SQL Server
我可以通过示例示例获取下面的内容:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': np.random.randn(4)})
df2 = pd.DataFrame({'key': ['B', 'D', 'D', 'E'],
'value2': np.random.randn(4)})
df3 = df1.merge(df2, on=['key'], how='left')
这给出了总共df1的记录(包括相交的记录)
但是如何进行左外连接,只有df1中的记录不在df2中?
不是:这只是示例。我可能在任一数据帧中都有大量列(不同)。
请帮忙。
答案 0 :(得分:3)
设置参数indicator=True
,这会添加一列_merge
,然后只过滤left_only
行:
In [46]:
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': np.random.randn(4)})
df2 = pd.DataFrame({'key': ['B', 'D', 'D', 'E'],
'value2': np.random.randn(4)})
df3 = df1.merge(df2, on=['key'], how='left', indicator=True)
df3
Out[46]:
key value1 value2 _merge
0 A -0.346861 NaN left_only
1 B 1.120739 0.558272 both
2 C 0.023881 NaN left_only
3 D -0.598771 -0.823035 both
4 D -0.598771 0.369423 both
In [48]:
df3[df3['_merge'] == 'left_only']
Out[48]:
key value1 value2 _merge
0 A -0.346861 NaN left_only
2 C 0.023881 NaN left_only
如果在旧版本上,则使用isin
和~
来否定掩码:
In [50]:
df3[~df3['key'].isin(df2['key'])]
Out[50]:
key value1 value2
0 A -0.346861 NaN
2 C 0.023881 NaN