заменить значения строки на значения строки из другого столбца, если выполнены условия - PullRequest
0 голосов
/ 13 мая 2018

Я хотел бы заменить значения строк в пандах.

import pandas as pd
import numpy as np
data = {'type': ['place', 'home', 'place', 'walk', 'place', 'work', 'home', 'place'],'labels': ['NaN', 'NaN', 'shop', 'Nan', 'clinic', 'NaN', 'NaN', 'NaN']}
a = pd.DataFrame(data, columns = ['type', 'labels'])

Есть ли возможность заменить ['type'] на ['tags'] только условия, если ['tags'] это не np.NaN, а ['type'] == 'place' с использованием панд?

Я бы предпочел использовать df.loc [], если это возможно.

1 Ответ

0 голосов
/ 13 мая 2018

Во-первых, предоставленные вами данные на самом деле не np.NaN, это просто строка 'NaN' или 'Nan', которые обрабатываются по-разному.Если это ваша отправная точка, вы можете сделать:

a['labels'] = a['labels'].str.lower().replace('nan', np.NaN)

Затем задайте mask и замените:

mask = (a['labels'].notnull()) & (a['type'] == 'place') 
df.loc[mask, 'type'] = df.loc[mask, 'labels']

     type  labels
0   place     NaN
1    home     NaN
2    shop    shop
3    walk     NaN
4  clinic  clinic
5    work     NaN
6    home     NaN
7   place     NaN

В качестве альтернативы тем же mask, определенным выше, вы можете использоватьnumpy.where

a['type'] = np.where(mask, a['labels'], a['type'])
...