Применение функции к столбцам в фрейме данных, заголовки столбцов которых содержат определенную строку - PullRequest
1 голос
/ 07 марта 2019

У меня есть информационный кадр passenger_details, который показан ниже

Passenger     Age  Gender   Commute_to_work    Commute_mode    Commute_time ...
Passenger1    32   Male      I drive to work      car              1 hour
Passenger2    26   Female    I take the metro     train            NaN    ...
Passenger3    33   Female      NaN                 NaN             30 mins      ...
Passenger4    29   Female    I take the metro     train            NaN     ...
...

Я хочу применить функцию if, которая превратит пропущенные значения (значения NaN) в 0 и представит значения в 1, к заголовкам столбцов, в которых есть строка 'Commute'.

Это в основном то, чего я пытаюсь достичь

Passenger     Age  Gender   Commute_to_work    Commute_mode    Commute_time ...
Passenger1    32   Male         1                 1              1
Passenger2    26   Female       1                 1              0    ...
Passenger3    33   Female       0                 0              1      ...
Passenger4    29   Female       1                 1              0     ...
...

Однако я борюсь с тем, как сформулировать мой код. Это то, что я сделал

passenger_details = passenger_details.filter(regex = 'Location_', axis = 1).apply(lambda value: str(value).replace('value', '1', 'NaN','0'))

Но я получаю ошибку типа

'replace() takes at most 3 arguments (4 given)'

Буду признателен за любую помощь

1 Ответ

1 голос
/ 07 марта 2019

Выбор столбцов по Index.contains и проверка не пропущенных значений по DataFrame.notna и последнее приведение к целому числу для True/False до 1/0 карты:

c = df.columns.str.contains('Commute')
df.loc[:, c] = df.loc[:, c].notna().astype(int)
print (df)
    Passenger  Age  Gender  Commute_to_work  Commute_mode  Commute_time
0  Passenger1   32    Male                1             1             1
1  Passenger2   26  Female                1             1             0
2  Passenger3   33  Female                0             0             1
3  Passenger4   29  Female                1             1             0
...