过滤 pandas 数据框,其中一列的值是另一列的子字符串

问题描述 投票:0回答:1

我有一个 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'])]

这会渲染一个空数据框(因此没有匹配项),这也是不正确的。

python pandas string substring
1个回答
0
投票

您不能为此使用 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
© www.soinside.com 2019 - 2024. All rights reserved.