Python Pandas создает новые столбцы из существующего, избегая итерации строк

#python #pandas

#питон #панды

Вопрос:

Заголовок ##У меня есть этот столбец df[‘title’]:

 Apartamento en Venta     
Proyecto Nuevo de Apartamentos
Proyecto Nuevo de Apartamentos
Lote en Venta     
Casa Campestre en Venta     
Proyecto Nuevo de Apartamentos 
 

На основе этого столбца я хочу создать три новых:

 df['property_type'] => (House, Apartment, Lot, etc)
df['property_status'] => (New, Used)
df['ofert_type'] => (Sale, Rent)
 

Я добиваюсь этого с помощью итерации строк и разделения:

 df['tipo_inmueble'] = ''
df['estado_inmueble'] = ''
df['tipo_oferta'] = ''

for data in range(len(df)):
    if 'Proyecto Nuevo de' in df.loc[data,'title']:
        df.loc[data,'property_type'] = df.loc[data,'title'].split('Proyecto Nuevo de')[1]
        df.loc[data,'property_type'] = str(df.loc[data,'property_type']).split(' ')[1][:-1]
        df.loc[data,'property_status'] = 'new'
        df.loc[data,'ofert_type'] = 'sale'
    else: 
        df.loc[data,'property_type'] = df.loc[data,'title'].split(' en ')[0]
        df.loc[data,'property_status'] = 'used'
        df.loc[data,'ofert_type'] = df.loc[data,'title'].split(' en ')[1].split(' ')[0].lower()
 

Но, похоже, такой подход требует слишком много времени для обработки всего фрейма данных. Я нахожусь в поисках более «панд» решения.

Спасибо вам за вашу помощь

Ответ №1:

Вы можете создать функцию и использовать функцию .apply — может быть быстрее, хотя вы все еще выполняете итерации.

 def property_split(row):
        if row['delta_points'] == 'apartment:
            return 1
        else:
            return 0
df['apartment'] = df.apply (lambda row: property_split(row), axis=1)