![](/img/trans.png)
[英]Python Pandas dataframe - for each item in one column, find related items in another
[英]Find items in one list but not in another in a pandas dataframe column
我一直在這里陷入死胡同,這讓我很傷心。
數據框:
accountid col2 col3
1 ['abc','def','xyz'] ['abc','mda','xyz','sdi']
2 ['abc','asd','xyz','dib] ['nio','ouy','abc']
3 ['abc','def','xyz'] ['abc','mda','xyz']
筆記
* col2 和 col3 中的每個字段都是列表
* col2 和 col3 中的字段在列表中的項目數可能不同
結果應該看起來像我正在嘗試創建一個 col4 來顯示 col3 中不在 col2 中的項目:
accountid col2 col3 col4
1 ['abc','def','xyz'] ['abc','mda','xyz','sdi'] ['mda','sdi']
2 ['abc','asd','xyz','dib] ['nio','ouy','abc'] ['nio','ouy']
3 ['abc','def','xyz'] ['abc','mda','xyz'] ['mda']
如果這沒有意義,請告訴我。 我很感激在這方面的任何幫助。
讓我們做
s=df.col3.apply(set)-df.col2.apply(set)
0 {sdi, mda}
1 {nio, ouy}
2 {mda}
dtype: object
df['New']=s.map(list)
檢查結果
s.map(list)
0 [sdi, mda]
1 [nio, ouy]
2 [mda]
dtype: object
你的列表不是列表,它是字符串
import ast
df.iloc[:,1:]=df.iloc[:,1:].applymap(ast.literal_eval)
嘗試這個。 沿列axis=1
應用 lambda 函數axis=1
df['col4'] = df.apply(lambda x : list(set(x['col3']).difference(set(x['col2']))), axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.