簡體   English   中英

在一個列表中查找項目,但不在熊貓數據框列中的另一個列表中查找項目

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

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