使用Pandas检查多列中的字符串是否显示在不同的列中

2024-05-13 12:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个panda查询,检查名字、中间名或姓氏是否包含在全名中,并给我一个计数

我有这张桌子:

FULL_NAME    FIRST_NAME   LAST_NAME
Joe Bloggs   Joe          Bloggs
Greg                      Greg  
Larson       Larson       
Emily Sun       
Clara Zen       
Justin Tim   Justin        Tim

预期产量为:4


Tags: name名字pandafullfirst计数lastjoe
2条回答

鉴于我们现在了解到只有完整的匹配项才应被计算在内,我们可以将其写成:

df['FULL_NAME'].eq((df['FIRST_NAME'] + ' ' + df['LAST_NAME']).str.strip()).sum()

输出:

4

请注意,我在原始答案中添加了.str.strip(),以涵盖在全名中仅指定第一个或仅指定姓氏的情况(在这些情况下,我们将从+ ' ' +中获得需要删除的前导/尾随空格)

我假设空白空间是“南”,或者可以很容易地做出它或类似的东西。空字符串将生成此代码的误报(因为它们包含在任何字符串中)

out=df.apply(lambda x: x['FIRST_NAME'] in x['FULL_NAME'] and x['LAST_NAME'] in x['FULL_NAME'],axis=1)
sum(out)

请参阅this问题,以了解有关列是彼此的子字符串的更多信息

Perl的注释看起来也是一个很好的答案,而且可能更快(很多事情都比apply快)。我还应该注意,根据数据的结构,我的代码可能会产生误报(例如,“Ti”的姓与“justintim”匹配)。此代码的好处是,如果您担心某些姓氏/名字可能已被切换。这将检测到匹配,即使我们正在寻找匹配“Tim Justin”

另一个可能有用的工具是pandas string splitting capabilities。这将允许您在某些指定字符处拆分全名,并根据字符串的组成部分执行操作。您甚至可以将列表扩展为多个新列,并与这些列进行比较

相关问题 更多 >