![](/img/trans.png)
[英]For each row in Pandas dataframe, check if row contains string from list
[英]Check if pandas dataframe contains specific string from a list of items
我有一个清单
my_list = ['element1 line','element2 ','element3', 'element4 line',....]
我有一个 pandas dataframe 有df
[ Sentences
] 列和df['flag']
列
df
Sentences flag
0 abcd
1 efgh
2 element1 ijkl
3 mnop element3 element4
4 qrst
我想迭代到列Sentences
的 dataframe 的每一行。 如果 my_list 中的任何元素出现在Sentences
中,则相应行中的df['flag']
列应为 1。 如果该行的句子字符串中不存在任何元素,则该行的df['flag']
应该为 0。
预期 output:
df
Sentences flag
0 abcd 0
1 efgh 0
2 element1 ijkl 1
3 mnop element3 element4 1
4 qrst 0
您需要使用循环:
df['flag'] = [int(any(w in my_list for w in x.split())) for x in df['Sentences']]
output:
Sentences flag
0 abcd 0
1 efgh 0
2 element1 ijkl 1
3 mnop element3 element4 1
4 qrst 0
请注意,您可以使用纯 pandas,但这要慢得多:
df['flag'] = (df['Sentences']
.str.split()
.explode().isin(my_list)
.groupby(level=0).any().astype(int)
)
您也可以在没有 2 个 for 循环的情况下尝试此操作:
df['flag'] = df['Sentences'].str.split().map(set).
apply(lambda x: any(x.intersection(my_list))*1)
嗨,可以返回列表的值而不是仅返回 true 或 false 吗?
就像是:
0 abcd
1个
2 元素 1 ijkl 元素 1 3 mnop 元素 3 元素 4 元素 3 4 qrst
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.