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]
时序小数据
时序大数据
我的初始数据框如下所示
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]
时序小数据
时序大数据