numpy 如何根据数组中的部分匹配从嵌套框架中删除行

axzmvihb  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(81)

我有一个与客户信息,包括名字和姓氏(单独列)的框架。我有一个名称数组,如果名称中有部分匹配,我想删除行。
例如,姓氏是smith-west,我在names数组中有smith,因此应该删除该行。这可能吗?

df = df[~df['First Name'].isin(names)]

但是isin函数只做精确匹配

c7rzv4ha

c7rzv4ha1#

这里有一个命题:您可以创建一个过滤器,以排除一个名称的时间。例如,如果您想排除姓名中包含“Smith”的任何个人,则过滤器可以是~df["Name"].str.contains("Smith")。如果列表中有多个名称,则可以使用&(逻辑与)将它们合并组合起来。下面是一个很短的代码,只是这样做:

import pandas as pd
df = pd.DataFrame({"First":["Bob","John","Peter"], "Name":["Smith-West","Adams","Washington"]})
name = ["Smith", "Santiago"]
filter = True
for n in name:
    filter = filter & (~df.Name.str.contains(n))
df[filter]
6yjfywim

6yjfywim2#

要回答有关如何使用类似方法但在两列上进行筛选的附加问题,请执行以下操作:

import pandas as pd
df = pd.DataFrame({"First":["Bob","John","Peter"], "Name":["Smith-West","Adams","Washington"]})
name = ["Smith", "Santiago"]
first = ["Joe", "Peter"]

filter_name = True
for n in name:
    filter_name = filter_name & (~df.Name.str.contains(n))

filter_first = True
for f in first:
    filter_first = filter_first & (~df.First.str.contains(f))

df[filter_name & filter_first]

简而言之,我们在name上创建第一个过滤器,在first上创建第二个过滤器。然后我们使用filter_name & filter_first组合合并。

相关问题