如何检查 pandas 列中的字符串列表?

How do I check a pandas Column for a list of strings?

数据框看起来像

我一直在寻找一种方法来搜索“父任务”列中的关键字,然后添加一个新列并为其输入类别名称。例如,任何包含关键字(我的项目、学习技能、业务)的行都会在名为类别的列中包含我的项目标签。

当前数据帧(csv 文件):

Start Date,Task Name,Duration (hours),Parent Task

01/02/2021,Sleeping ,1.33639,

02/02/2021,Sleeping ,6.43167,

02/02/2021,coding,0.78028,Learning a skill

02/02/2021,Commute,0.22694,

02/02/2021,reading,1.14778,My_projects

02/02/2021,Commute,0.56139,

02/02/2021,Prep,0.37611,

所需数据框(csv 文件):

Start Date,Task Name,Duration (hours),Parent Task, Category

01/02/2021,Sleeping ,1.33639,,Sleeping

02/02/2021,Sleeping ,6.43167,,Sleeping

02/02/2021,coding,0.78028,Learning a skill,My project

02/02/2021,Commute,0.22694,,Commute

02/02/2021,reading,1.14778,My projects, My project

02/02/2021,Commute,0.56139,, Commute

02/02/2021,Prep,0.37611,, Prep

我一直在尝试应用这个方法:

My_projects_tasks = '|'.join(['My_projects', 'Learning a skill', 'Business'])
if df['Parent Task'].str.contains( My_projects_tasks , na=False):
    df['Category'] = 'My_project'

但是我收到这个错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

有没有更有效的方法来解决这个问题?因为我要添加多个类别并且有很多行? 然后我想总结每天每个类别的所有持续时间,并在不同的 CSV 文件中显示,但我还没有做到这一点。 谢谢

您可以尝试生成一个 bool series 然后您只需要应用一个函数来添加 My_project ,例如:

from numpy import nan

df['Category'] = df['Parent Task'].isin(['My_projects', 'Learning a skill', 'Business']).apply(lambda x: 'My_project' if x else nan)

IIUC:

尝试通过 fillna()replace():

d={'Learning a skill':'My_projects','Business':'My_projects'}
df['Category']=df['Parent Task'].fillna(df['Task Name']).replace(d)