[英]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.