【问题标题】:Pandas - check if set values in column are a subset of set values in another columnPandas - 检查列中的设置值是否是另一列中设置值的子集
【发布时间】:2021-02-21 13:35:36
【问题描述】:

我有一个数据框df,其中的列包含集合。这是一个示例:

  df=pd.DataFrame([[{1,2,3,'a'},{5,'b','d',1,4}],
                   [{'z',9,'a','b',3},{'a',3,'z','b','d',9,4}]],columns=['set1','set2'])
      
        

我想检查列“set1”在哪里是列“set2”的子集,并返回 True 或 False。上面的结果应该是:

df
Out[69]: 
              set1                   set2  issubset
0     {a, 1, 2, 3}        {1, 4, 5, d, b}     False
1  {a, 3, 9, b, z}  {a, 3, 4, d, 9, b, z}      True

我尝试了各种 lambda 组合,但无法让它发挥作用。例如:

df['issubset']=df.apply(lambda x:x.set1.issubset(x.set2))

结果是AttributeError: 'Series' object has no attribute 'set1'

可能有很多方法可以在这里给猫剥皮。速度很重要,因为每个真实集合都有 10,000 个值,而 df 是数千行。谢谢

【问题讨论】:

  • 对于您的代码,您需要使用apply 指定轴,即df.apply(lambda x : x['set1'].issubset(x['set2']),axis=1)

标签: python pandas dataframe set subset


【解决方案1】:

我没有研究过这种方法背后的性能分析,但你的问题是应用运行的方向。为了比较 set1 和 set2,应用需要跨轴 = 1。

但是,apply 函数(与几乎所有其他函数一样)默认为 axis=0。

当添加axis=1时,我得到了你想要的输出:

df['issubset']=df.apply(lambda x:x.set1.issubset(x.set2), axis=1)

导致

              set1                   set2  issubset
0     {1, 2, 3, a}        {1, 4, 5, d, b}     False
1  {3, z, 9, a, b}  {3, 4, z, 9, a, d, b}      True

【讨论】:

    猜你喜欢
    • 2020-03-15
    • 2022-12-12
    • 2016-07-16
    • 2018-08-16
    • 2020-11-06
    • 1970-01-01
    • 2021-09-19
    • 2022-07-05
    相关资源
    最近更新 更多