我试图找出一个更直接的替代方案,用于根据包含 True、False 或 NaN 值的其他两个列在 pandas 数据框中评估和创建新列。我希望新列相对于两个参考列进行如下评估:
- 如果任一 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'])
)
)
单参考柱解决方案:
df['col4'] = df['col1'].map(lambda x: x, na_action='ignore')