【发布时间】:2021-07-06 17:43:55
【问题描述】:
我有一个包含 3 列的 DataFrame,每个列的值都可以是 NaN。
我想根据这 3 列填充第 4 列,以便在列上应用 or 操作:如果第 1 列不是 NaN,则取其值,否则检查第 2 列等。
由于NaN 值不是False,因此or 运算符不能按原样使用。
这是我附带的代码,但它不是 Pythonic 或 Pandas-ic。是否有内置功能可以做到这一点?或者,如果您有任何其他建议?
import pandas as pd
import numpy as np
nan = np.NaN
df = pd.DataFrame({"a": [nan, 1, nan], "b": [2, nan, nan], "c": [nan, nan, 3]})
# a b c
# 0 NaN 2.0 NaN
# 1 1.0 NaN NaN
# 2 NaN NaN 3.0
nan_to_false = lambda val: False if pd.isna(val) else val
df["a_or_b_or_c"] = df.apply(lambda row: nan_to_false(row["a"]) or nan_to_false(row["b"]) or nan_to_false(row["c"]), axis=1)
# 0 2.0
# 1 1.0
# 2 3.0
【问题讨论】: