我正在python的pandas中加入两个数据帧(A和B).
目标是从B接收所有纯行(在A.client_id = B.client_id上的sql analogue- right join B,其中A.client_id为null)
在大熊猫中我所知道的这个操作是合并但我不知道如何设置条件(where子句):
x=pd.merge(A,B,how='right',on=['client_id','client_id']
Run Code Online (Sandbox Code Playgroud)
谢谢!
选项1
indicator=True
A.merge(B, on='client_id', how='right', indicator=True) \
.query('_merge == "right_only"').drop('_merge', 1)
Run Code Online (Sandbox Code Playgroud)
设置
A = pd.DataFrame(dict(client_id=[1, 2, 3], valueA=[4, 5, 6]))
B = pd.DataFrame(dict(client_id=[3, 4, 5], valueB=[7, 8, 9]))
Run Code Online (Sandbox Code Playgroud)
结果
更多说明
indicator=True在合并结果中放置另一列,指示行结果是来自左侧、右侧还是两者。
A.merge(B, on='client_id', how='outer', indicator=True)
Run Code Online (Sandbox Code Playgroud)
因此,我只是用来query过滤掉right_only指标,然后删除该列。
选项2
并不是真正的合并。您可以query再次使用来仅拉出B其'client_id's 不在的A
B.query('client_id not in @A.client_id')
Run Code Online (Sandbox Code Playgroud)
或者用同等的方式表达同样的事情(但更快)
B[~B.client_id.isin(A.client_id)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4426 次 |
| 最近记录: |