首页 > 解决方案 > 在 pandas 数据框列的一个列表中查找项目,但不在另一个列表中查找项目

问题描述

我一直在这里陷入死胡同,这让我很生气。

数据框:

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']

让我知道这是否没有意义。我很感激这方面的任何帮助。

标签: pythonpandasnumpy

解决方案


让我们做

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)

推荐阅读