嵌套np.where语句的替代方案,用于在基于其他两个现有列创建新的pandas布尔列时保留NaN值

bdn711

我试图找出一种更直接的替代方法,用于基于另外两个包含True,False或NaN值的列在pandas数据框中评估和创建新列。我希望新列相对于两个参考列的评估如下:

  • 如果为真->真
  • 如果至少有一个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')
约翰·兹温克

np.select() 适用于这种类型的工作:

df['col3'] = pd.Series(np.select(
    [(df.col1 == True) | (df.col2 == True), (df.col1 == False) | (df.col2 == False)],
    [True, False], np.array(np.nan, object)))

或者,仅使用熊猫,但我认为这种方式的可读性较差:

df['col3'] = df.col1.where(df.col1, df.col2.where(df.col2.notnull(), df.col1))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 np.where 用于嵌套列表

替代Pandas DataFrame中的嵌套np.where

基于4个条件的数据框列,嵌套np.where

用基于其他列的值填充np.nan

如何嵌套numpy()的np.where或另一个嵌套?

Pandas的性能适用于vs.np.vectorize从现有列创建新列

用np.nan填充嵌套的numpy数组时出现奇怪的行为

如何使用 np.where 嵌套在 pandas 的数据框中?

我正在尝试使用多个嵌套的 np.where 在 python 中创建数据框的一列,同时面临错误

如何将嵌套的np.array转换为pandas dataframe单列

numpy:从JSON文件加载数据使np数组具有嵌套列表

代码看起来“不是 pythonic” - 嵌套 np.where() 将列添加到 pd.dataframe

此Numpy / Pandas代码基于其他两个布尔列中的值构造新的布尔列有什么问题?

使用嵌套ifelse语句创建两个列而不是一个列的mutate函数

根据其他列中的值将列中的值量更改为np.nan

使用np.where创建具有三个条件的新列

基于嵌套的if条件创建新列并比较R中列表中的值的有效方法

PySpark-添加新的嵌套列或更改现有嵌套列的值

如何通过比较其他两个列来创建具有值的新列?

新列是基于嵌套If公式的加倍值

熊猫根据其他两个具有日期时间值的列创建一个布尔列

使用np.where将列值转换为NaN

如何基于Pandas数据框中其他多个列的值添加两个新列?

如何创建包含两个连接的嵌套 LINQ 语句

用np选择两个熊猫列

SQL:基于重复观察的数据集中其他两个列的条件创建新列

基于2个键列和1个值列的带有嵌套词典的pandas数据帧转换为词典

如何基于应用于其他两个列的函数更改列中的值

如何用其他有时包含np.nan的列中的字符串填充df列,并通过elif进行迭代以返回适当的组合?