我有两列,都是字符串,我想创建一个函数,在 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'
我在这个问题上看到过类似的条目,但这些条目的解决方案是使用字典,据我所知,这不适合这种情况,因为我需要根据它们的相对值删除这些行。
如果我可以提供任何进一步的细节,请告诉我。
代码
虽然矢量化操作可能是可能的,但这里有一个目前应该有效的非矢量化解决方案。
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