我有一个数据框:

df = pd.DataFrame({'id' : ['abarth 1.4 a','abarth 1 a','land rover 1.3 r','land rover 2',
                           'land rover 5 g','mazda 4.55 bl'],
                   'series': ['a','a','r','','g', 'bl'] })


我想从相应的ID中删除“系列”字符串,因此最终结果应为:

'id': ['abarth 1.4','abarth 1','land rover 1.3','land rover 2','land rover 5', 'mazda 4.55']

目前,我正在使用df.apply:

df.id = df.apply(lambda x: x['id'].replace(x['series'], ''), axis =1)


但这会删除字符串的所有实例,即使这样,也是如此:
'id': ['brth 1.4','brth 1','land ove 1.3','land rover 2','land rover 5', 'mazda 4.55']

我是否应该像这样将regex与df.apply中的变量混合并匹配?

df.id = df.apply(lambda x: x['id'].replace(r'\b' + x['series'], ''), axis =1)

最佳答案

如果要指定re字符串,请使用series

df.apply(lambda x: re.sub('\s*{}$'.format(x['series']), '', x['id']), axis=1)


如果series字符串始终是可预测的模式(即[a-z]),您也可以尝试:

df['id'].apply(lambda x: re.sub('\s*[a-z]+$', '', x))


无论哪种方式,输出都是您想要的:

0        abarth 1.4
1          abarth 1
2    land rover 1.3
3      land rover 2
4      land rover 5
5        mazda 4.55

10-07 17:48