Pandas:检查列A中的值是否在B列中的值列表中的有效方法

时间:2017-04-21 23:38:30

标签: python list pandas contains

我的初始数据框看起来像这样

 A   | B
-----------------
 'a' | ['1', 'a', 'b']        
 '1' | ['2', '5', '6']   
 'd' | ['a', 'b', 'd']        
 'y' | ['x', '1', 'y']

我想检查B中相应列表中是否有'a':['1','a','b']

我可以使用apply

来做到这一点
df.apply(lambda row: row[['A']][0] in row[['B']][0], axis=1)           

给了我预期的结果:

[True, False, True, True]

但是我拥有的真实数据(数百万行)非常重,需要很长时间。 是否有更有效的方法来做同样的事情? 例如使用numpy elementwise操作还是其他任何东西?

1 个答案:

答案 0 :(得分:4)

如果您将每列转换为集合,则可以使用<来比较成对子集

a = d.A.apply(lambda x: set([x]))
b = d.B.apply(set)

a < b

0     True
1    False
2     True
3     True
dtype: bool

否则,您可以将列表理解与zip

一起使用
[a in b for a, b in zip(d.A.values.tolist(), d.B.values.tolist())]

[True, False, True, True]

计时小数据

enter image description here

计时大数据

enter image description here