我有一个数据框:

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)

最佳答案

使用str.splitstr.get,仅在loc时使用df.make == ''进行分配

df.loc[df.make == '', 'make'] = df.id.str.split().str.get(0)

print df

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

09-06 08:19