我想在pandas数据框中创建一个新列,该列的取值为True,False或NaN,具体取决于在同一数据框中的其他两个列中找到的值,该值也仅包含True,False或NaN值。具体来说,如下所示,新列中的行值应为:(a)如果两个参考列值之一为True,则为True;(b)如果两个参考列值均为False或它们是False和NaN的组合,则为False ,或(c)NaN(如果两个参考列值均为NaN)。
col_A + col_B => new_col(所需值)
最初,如下所示,我尝试为col_A或col_B为True的新列分配值,但是可以理解的是,只要其中一列或两列都包含NaN,它就会返回False。
df[new_col] = df[col_A] | df[col_B]
我还想出了如何创建对col_A和col_B均为NaN的行返回True的列,但我仍在努力寻找下一步。
df[new_col] = pd.isnull(df[col_A]) & pd.isnull(df[col_B])
我觉得我最终可以使用for循环/ if语句获得正确的输出,但是我的理解是,这将是超级低效的,而且似乎应该有一种更高效/直接的方法来获得我想要的结果。
使用.any
设置数据框:
dict = {
'col_A': [True, True, True, False, False, False, np.NaN, np.NaN, np.NaN],
'col_B': [True, False, np.NaN, False, True, np.NaN, np.NaN,True, False]
}
df = pd.DataFrame(dict)
print(df)
col_A col_B
0 True True
1 True False
2 True NaN
3 False False
4 False True
5 False NaN
6 NaN NaN
7 NaN True
8 NaN False
创建一个新列并将所有值设置为false。我们将填写其他值。
df['new_col'] = False
使用.any()填写剩余的True和NaN值。
df.loc[df[['col_A', 'col_B']].any(1), 'new_col'] = True
打印(df)
col_A col_B new_col
0 True True True
1 True False True
2 True NaN True
3 False False False
4 False True True
5 False NaN False
6 NaN NaN False
7 NaN True True
8 NaN False False
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句