![](/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.