我有一个列表
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)
)