如果列包含另一个字符串,则删除 Pandas 中的行

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

我有两列,都是字符串,我想创建一个函数,在 full_name 包含part_name 的情况下删除行

df = pd.DataFrame({'city_code':['34', '36', '89', '34'], 'full_name': ['WXYZ(24)', 'ZYXW', 'YZWX', '], 'part_name': ['WXYZ', 'ABCD', 'YZWX']})
print(df)

city_code full_name   part_name
34         WXYZ(24)      WXYZ
36         ZYXW          ABCD
89         YZWX          YZWX
34         WXYZ(24)      ABCD

我想要的输出是:

city_code  full_name   part_name
36          ZYXW       ABCD
34          WXYZ(24)   ABCD

因为这一行是唯一一个part_name 不包含在full_name 中的行。我已尝试以下操作并收到以下错误:

df = df[~df['full_name'].str.contains(df['part_name'])]
TypeError: unhashable type: 'Series'

我在这个问题上看到过类似的条目,但这些条目的解决方案是使用字典,据我所知,这不适合这种情况,因为我需要根据它们的相对值删除这些行。

如果我可以提供任何进一步的细节,请告诉我。

python pandas dataframe contains
1个回答
0
投票

代码

虽然矢量化操作可能是可能的,但这里有一个目前应该有效的非矢量化解决方案。

cond = df.apply(lambda x: x['part_name'] not in x['full_name'], axis=1)
out = df[cond]

  city_code full_name part_name
1        36      ZYXW      ABCD
3        34  WXYZ(24)      ABCD
© www.soinside.com 2019 - 2024. All rights reserved.