微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在python熊猫中实现左外部联接?

这个问题已经在这里有了答案:            >            Pandas Merging 101                                    2个
我一直在尝试在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中的左外部联接?

不是:这仅是示例,在两个数据帧中我可能都有大量的列(不同).

请帮忙.

解决方法:

设置参数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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐