在数据框单元格中搜索列表列表

时间:2019-06-25 06:46:44

标签: pandas dataframe

我有一个包含2列错误和注释的数据框 我的错误列将在每个单元格中包含一个字符串列表。我需要帮助编写代码来搜索数据框并找到该行的注释,其中“数据框错误”内容与用户输入val1相匹配。

我尝试了给定的代码,但给出的错误长度不匹配

df.loc[df['Error'].values == val1, 'Comments']

其中df是我的数据框,其中包含“错误”和“评论”列

df

Error                       Comments
['My data1','My data2']    'Resolution1'
['My data1','My data3']    'Resolution2'

假设val1 = ['My data1','My data2']

我的结果是通过val1搜索df来找到Resolution1作为输出

2 个答案:

答案 0 :(得分:2)

Simplist是比较列表,如果需要完全匹配:

m = df['Error'].apply(lambda x: x == val1)

如果顺序应该不同,请转换为组合并使用comapre:

m = df['Error'].apply(lambda x: bool(set(x) == set(val1)))

如果需要交叉点:

m = df['Error'].apply(lambda x: bool(set(x).intersection(set(val1))))

或者:

m = ~df['Error'].map(set(val1).isdisjoint)

out = df.loc[m, 'Comments']

如果需要更改值:

df.loc[m, 'Comments'] = 'another value'

答案 1 :(得分:1)

如果订单不重要

df[df['Error'].apply(lambda x: ' '.join(x) == ' '.join(val1))]['Comments']

输出

0      'Resolution1'
Name:    Comments, dtype: object

如果要考虑订单

df[df.Error.apply(lambda x: True if len(set(x+val1)) == len(x) else False )]['Comments']

输出

0      'Resolution1'
Name: Comments, dtype: object