我有一个 pandas 数据框,其中一列仅包含开始任务的人员的名字,另一列包含完成任务的人员的名字:
开始任务 | 已完成任务 |
---|---|
安妮 | 安妮P |
玛丽 | 克尔斯滕·S |
鲍勃 | 鲍勃·N |
凯茜 | 凯茜R |
霍华德 | 莫莉小号 |
我需要通过将“开始的任务”匹配为“已完成的任务”的子字符串来过滤此数据框以查找那些开始并完成任务的人。所以我要返回的数据框是:
开始任务 | 已完成任务 |
---|---|
安妮 | 安妮P |
鲍勃 | 鲍勃·N |
凯茜 | 凯茜R |
我尝试在原始数据框中添加一列作为我可以过滤的“匹配”列,这是首选,这样我可以在过滤之前检查匹配项。
df['Match']=str.find(df.StartedTask, df.CompletedTask)
这给出了一个错误:“str”对象的描述符“find”不适用于“Series”对象
我还尝试使用以下代码来过滤数据集:
filtereddf = df.loc[df['StartedTask'].isin(df['CompletedTask'])]
这会渲染一个空数据框(因此没有匹配项),这也是不正确的。
您不能为此使用 pandas 向量化操作,您必须循环遍历值对(例如使用
zip
和列表理解):
df[[s in c for s,c in zip(df['StartedTask'], df['CompletedTask'])]]
输出:
StartedTask CompletedTask
0 Anne Anne P
2 Bob Bob N
3 Cathy Cathy R