我有2个数据框,X和Y具有相同的列,并且我试图删除出现在Y中的X中的行,但是我只想根据列的子集来比较它们。
例:
>>> X
site_domain id url
0 a.com 1 ad_a.com/test
1 b.com 2 ad_b.com/test
2 c.com 3 ad_c.com/test
3 d.com 4 ad_d.com/test
4 e.com 5 ad_e.com/test
>>> Y
site_domain id url
0 a.com 1 ad_a.com/test
1 b.com 10 ad_b.com/test
2 other.com 3 ad_c.com/test
3 d.com 4 ad_other.com/test
我想删除从X出现在Y,在我的定义行,这意味着,列site_domain
和url
必须匹配,但我不在乎id
。因此,我的操作结果应该是:
site_domain id url
0 c.com 3 ad_c.com/test
1 d.com 4 ad_d.com/test
2 e.com 5 ad_e.com/test
我该怎么办?我认为这将需要在X上应用一些布尔掩码,但是我不知道如何生成适用于索引的布尔掩码(以便一次保留或拒绝整个行),而且我也不需要知道如何生成这样的蒙版。
我尝试X['site_domain'] == Y['site_domain'] & X['url'] == Y['url']
使用否定该蒙版创建一个蒙版,但是Pandas抱怨这些系列的标签不相同。我可能会用相同的标签制作这些系列的版本,但是我觉得这对于这样一个简单的问题会很麻烦。
您可以串联site_domain和url并用于isin
检查串联的字符串是否在Y中
X[~(X['site_domain']+'_'+X['url']).isin(Y['site_domain']+'_'+Y['url'])]
site_domain id url
2 c.com 3 ad_c.com/test
3 d.com 4 ad_d.com/test
4 e.com 5 ad_e.com/test
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句