检查pandas数据帧是否包含项目列表中的特定字符串



我有一个列表

my_list = ['element1 line','element2 ','element3', 'element4 line',....]

并且我具有具有df[Sentences]列和df['flag']列的熊猫数据帧

df
Sentences               flag
0   abcd    
1   efgh    
2   element1 ijkl           
3   mnop element3 element4      
4   qrst

我想迭代到列Sentences的每一行数据帧。如果my_list中的任何元素存在于Sentences中,则相应行中的df['flag']列应为1。如果该行的字符串中没有元素,则该行的df['flag']应为0。

预期输出:

df
Sentences                flag
0   abcd                      0
1   efgh                      0
2   element1 ijkl             1 
3   mnop element3 element4    1     
4   qrst                      0

您也可以在没有2个for循环的情况下尝试:

df['flag'] = df['Sentences'].str.split().map(set).
apply(lambda x: any(x.intersection(my_list))*1)

您需要使用一个循环:

df['flag'] = [int(any(w in my_list for w in x.split())) for x in df['Sentences']]

输出:

Sentences  flag
0                    abcd     0
1                    efgh     0
2           element1 ijkl     1
3  mnop element3 element4     1
4                    qrst     0

请注意,您可以使用纯熊猫,但速度慢得多

df['flag'] = (df['Sentences']
.str.split()
.explode().isin(my_list)
.groupby(level=0).any().astype(int)
)

相关内容

  • 没有找到相关文章

最新更新