【问题标题】:Pandas: Efficient way to check if a value in column A is in a list of values in column BPandas:检查A列中的值是否在B列中的值列表中的有效方法
【发布时间】:2017-09-19 02:16:15
【问题描述】:

我的初始数据框如下所示

 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 操作或其他什么?

【问题讨论】:

    标签: python list pandas contains


    【解决方案1】:

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

    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]
    

    定时小数据

    定时大数据

    【讨论】:

    • 我选择了列表解析方式,这绝对是一个巨大的节省时间。非常感谢!
    • 您能解释一下为什么这样快得多吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 2012-09-04
    • 1970-01-01
    • 2022-12-12
    • 2018-05-10
    • 2020-10-19
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多