回答

收藏

带有WHERE子句的JOIN Pandas analogue

技术问答 技术问答 240 人阅读 | 0 人回复 | 2023-09-13

我正在使用两个数据帧(A和B)连接到python的pandas中。  F  e# {' e  f; b% z/ z7 j
目标是从B接收所有纯行(3 y" J3 A, Y- W& e) i
A.client_id = B.client_id上的SQL模拟右联接B,其中A.client_id为null)% _/ k* \) [& W4 V
在pandas我所知道的只是合并,但我不知道该怎么办# k' H' @' W& h& R& _
设置条件(where子句):
# G6 h2 p* U% W1 Q: ]6 j) x) Px=pd.merge(A,B,how='right',on=['client_id','client_id           
* g, u! C5 _: Q* U    解决方案:                                                                : p( F6 X: f( J" X
                                                                option 1
- u$ t9 B; Z+ h7 \( a7 X" Qindicator=True
0 ?1 m6 y' ]' S  e8 s* xA.merge(B,on='client_id',how='right',indicator=True) \    .query('_merge == "right_only"').drop('_merge',1)setup
- {4 X" P. M% N! }' |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])results6 D  g. T  D, L: U( I$ A3 t7 P" A
更多说明# u4 f! H2 V' `4 |8 _
indicator=True另一列添加到合并结果中
! t3 y( Z. ]2 ?4 C9 p+ K9 x2 k5 V7 Z指示结果来自左侧、右侧或两者。
( D& s9 ?1 U" Z% k4 ~& B$ dA.merge(B,on='client_id',how='outer',indicator=True)所以,我只是query用来过滤right_only指标,然后删除列。% I  l7 T! l# q) y; I
选项2& ?5 o$ G# N  B1 q
不是真正的合并。query再次使用来仅拉出 其不在B其中的行’client_id’A
: I. L- g0 e/ a9 @B.query('client_id not in @A.client_id')or an equivalent way of saying the same thing (but faster)
, z& ^+ K; T4 F$ K+ S% M8 x( @; T2 YB[~B.client_id.isin(A.client_id)]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则