[英]Pandas analogue of JOIN with WHERE clause
我正在 python 的熊貓中加入兩個數據框(A 和 B)。
目標是從 B 接收所有純行(sql 模擬-在 A.client_id=B.client_id 上右連接 B,其中 A.client_id 為空)
在 Pandas 中,我只知道這個操作是進行合並,但我不知道如何設置條件(where 子句):
x=pd.merge(A,B,how='right',on=['client_id','client_id']
對我來說,這也有點不盡如人意,但我認為推薦的方式是這樣的:
x = pd.merge(A[A["client_ID"].isnull()], B,
how='right', on=['client_id', 'client_id'])
更多信息可以在pandas 文檔中找到
此外,您可能會使用A.where(A["client_ID"].isnull())
進行過濾。 另外,請注意我在以前版本中的錯誤。 我正在與None
進行比較,但您應該使用isnull()
函數
選項 1
indicator=True
A.merge(B, on='client_id', how='right', indicator=True) \
.query('_merge == "right_only"').drop('_merge', 1)
設置
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]))
結果
更多解釋
indicator=True
將另一列放在合並的結果中,指示該行結果是來自左側、右側還是兩者兼而有之。
A.merge(B, on='client_id', how='outer', indicator=True)
所以,我只是使用query
來過濾掉right_only
指標,然后刪除該列。
選項 2
不是真正的合並。 您可以再次使用query
來僅提取B
的'client_id'
不在A
B.query('client_id not in @A.client_id')
或者說同樣的事情的等價方式(但更快)
B[~B.client_id.isin(A.client_id)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.