背景:我有以下数据框
import pandas as pd
d = {'text': ["paid", "paid and volunteer", "other phrase"]}
df = pd.DataFrame(data=d)
df['text'].apply(str)
输出:
text
0 paid
1 paid and volunteer
2 other phrase
目标:
1)检查每一行以确定是否存在paid
并返回布尔值(如果True
在文本列中的任何位置,则返回paid
,如果{False
则返回paid
1}}不存在。但我想排除单词volunteer
。如果volunteer
存在,则结果应为false
。
2)创建一个包含结果的新列
期望输出:
text result
0 paid true
1 paid and volunteer false
2 other phrase false
问题:我使用以下代码
df['result'] = df['text'].astype(str).str.contains('paid') #but not volunteer
我检查了How to negate specific word in regex?,它显示了如何排除单词但我不确定如何在代码中加入
问题: 如何更改我的代码以实现我的目标1)和2)
答案 0 :(得分:1)
使用lambda
:
df['result'] = df['text'].apply(lambda row: True if ('paid' in row) and ('volunteer' not in row) else False)
答案 1 :(得分:0)
您可以使用逻辑并检查两种情况。
(df.text.str.contains('paid')) & (~df.text.str.contains('volunteer'))
Out[14]:
0 True
1 False
2 False
Name: text, dtype: bool