Я пытаюсь найти более простую альтернативу для оценки и создания нового столбца в кадре данных pandas на основе двух других столбцов, которые содержат значения True, False или NaN. Я хочу, чтобы новый столбец оценивался следующим образом относительно двух ссылочных столбцов:
- Если либо True -> True
- Если хотя бы один False и ни один True -> False
- Если оба NaN -> NaN
Я нашел решение, используя несколько вложенных операторов np.where, но предпочел бы более простой подход. Для одного ссылочного столбца я разобрался, как это сделать (см. Ниже показанное как col4), но не могу понять, есть ли способ приспособить это к разложению на несколько ссылочных столбцов.
Текущее решение:
import pandas as pd
import numpy as np
d = {'col1': [True, True, True, False, False, False, np.nan, np.nan, np.nan],
'col2': [True, False, np.nan,True, False, np.nan,True, False, np.nan]}
df = pd.DataFrame(data=d)
df['col3'] = np.where(
pd.notnull(df['col1']) & pd.notnull(df['col2']),
(df['col1'] == True) | (df['col2'] == True),
np.where(
pd.isnull(df['col1']) & pd.isnull(df['col2']),
np.nan,
np.where(pd.notnull(df['col1']),df['col1'],df['col2'])
)
)
Single Reference Column Решение:
df['col4'] = df['col1'].map(lambda x: x, na_action='ignore')