在熊猫中设置联盟

发布于 2021-01-29 14:11:21

我有两列,将集存储在数据框中。

我想使用快速向量化操作在两列上执行集合并集

df['union'] = df.set1 | df.set2

但是错误TypeError: unsupported operand type(s) for |: 'set' and 'bool'使我无法这样做,因为我np.nan在两列中都输入了内容。

有解决这个问题的好方法吗?

关注者
0
被浏览
124
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    对于这些操作,纯Python可能更有效。

    %timeit pd.Series([set1.union(set2) for set1, set2 in zip(df['A'], df['B'])])
    10 loops, best of 3: 43.3 ms per loop
    
    %timeit df.apply(lambda x: x.A.union(x.B), axis=1)
    1 loop, best of 3: 2.6 s per loop
    

    如果我们可以使用+,则可能会花费一半的时间(继承可能不值得):

    %timeit df['A'] - df['B']
    10 loops, best of 3: 22.1 ms per loop
    
    %timeit pd.Series([set1.difference(set2) for set1, set2 in zip(df['A'], df['B'])])
    10 loops, best of 3: 35.7 ms per loop
    

    时序的DataFrame:

    import pandas as pd
    import numpy as np
    l1 = [set(np.random.choice(list('abcdefg'), np.random.randint(1, 5))) for _ in range(100000)]
    l2 = [set(np.random.choice(list('abcdefg'), np.random.randint(1, 5))) for _ in range(100000)]
    
    df = pd.DataFrame({'A': l1, 'B': l2})
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看