Python 如何使用字符串列表比较两列,并创建具有唯一项的新列?

Python 如何使用字符串列表比较两列,并创建具有唯一项的新列?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有两列,都有字符串列表。基本上是一列df[“产品”],所有大写字母。另一列是产品说明df['desc'] 我想检查df['products']中的所有项目在df['desc']中都有哪些,并在其中创建一个新列 我尝试了以下代码: df['uniq'] = df.apply(lambda x : [i for i in x['products'] if i.lower() in x['desc']]) 我检查了其他类似的问题并构建了上述代码,但它不起作用 数据如下所示: 当你不是绝对需要的时候

我有两列,都有字符串列表。基本上是一列df[“产品”],所有大写字母。另一列是产品说明df['desc']

我想检查df['products']中的所有项目在df['desc']中都有哪些,并在其中创建一个新列

我尝试了以下代码:

df['uniq'] = df.apply(lambda x : [i for i in x['products'] if i.lower() in x['desc']])
我检查了其他类似的问题并构建了上述代码,但它不起作用

数据如下所示:

当你不是绝对需要的时候,不要使用apply。很慢

而是以矢量化的方式进行:

desc_upper = df.desc.str.upper()
matches = df.products.isin(desc_upper)
result = df.products[matches]
当你不是绝对需要的时候,不要使用apply。很慢

而是以矢量化的方式进行:

desc_upper = df.desc.str.upper()
matches = df.products.isin(desc_upper)
result = df.products[matches]
如果需要按行检查,则需要添加axis=1:

df = pd.DataFrame({'products':[['A','B'],['D','C']],
                   'desc':[['a', 'c'],['c', 'e']]})

df['uniq'] = df.apply(lambda x: [i for i in x['products'] if i.lower() in x['desc']], axis=1)
print (df)
     desc products uniq
0  [a, c]   [A, B]  [A]
1  [c, e]   [D, C]  [C]
如果需要按行检查,则需要添加axis=1:

df = pd.DataFrame({'products':[['A','B'],['D','C']],
                   'desc':[['a', 'c'],['c', 'e']]})

df['uniq'] = df.apply(lambda x: [i for i in x['products'] if i.lower() in x['desc']], axis=1)
print (df)
     desc products uniq
0  [a, c]   [A, B]  [A]
1  [c, e]   [D, C]  [C]

你能发布样本数据吗?你能发布样本数据吗?