2016-05-28 3 views
2

У меня есть dataframe:панды dataframe вернуть первое слово в строке для столбца

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': ['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']

Должен ли я каким-то образом смешивать и сочетать регулярное выражение с переменной внутри df.apply, как так?

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

ответ

8

Использование str.split и str.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 
0

Если я получил ваш вопрос правильно, вы можете просто использовать replace функцию:

df.make = df.make.replace("", test.id) 
+0

OP требует первое слово 'id' колонке. – Parfait

1

Рассмотрим регулярное выражение решение с loc, где он извлекает все до первого места:

df.loc[df['make']=='', 'make'] = df['id'].str.extract('(.*) ', expand=False) 

В качестве альтернативы, используйте numpy's where, который допускает условную логику if/then/else:

df['make'] = np.where(df['make']=='', 
         df['id'].str.extract('(.*) ', expand=False), 
         df['make']) 
Смежные вопросы