簡體   English   中英

Pandas - 檢查列中的設置值是否是另一列中設置值的子集

[英]Pandas - check if set values in column are a subset of set values in another column

我有一個數據框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

我嘗試了各種 lambdas 組合,但無法使其正常工作。 例如:

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

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

可能有很多方法可以在這里給貓剝皮。 速度很重要,因為每個真實集都有 10,000 個值,而 df 是數千行。 謝謝

我沒有研究過這種方法背后的性能分析,但您的問題是應用運行的方向。 為了將 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM