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

Pandas: Efficient way to check if a value in column A is in a list of values in column B

我的初始数据框如下所示

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

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

我可以使用 apply

df.apply(lambda row: row[['A']][0] in row[['B']][0], axis=1)           

这给了我预期的结果:

[True, False, True, True]

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

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

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]

时序小数据

时序大数据