numpy 在panda Dataframe 列中查找一个列表中的项目,但不在另一个列表中

flmtquvp  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(132)

我一直在这里陷入死胡同,这让我很难受。

数据框:

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

接下来我可以尝试什么?

imzjd6km

imzjd6km1#

让我们做

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)
ljo96ir5

ljo96ir52#

尝试这样做。沿着列axis=1应用lambda函数

df['col4'] = df.apply(lambda x : list(set(x['col3']).difference(set(x['col2']))), axis=1)

相关问题