我有一个包含 3 列的 DataFrame,每列的值为NaN
。
我想根据这 3 列填充第四列,这样or
操作应用于列:如果第一个不是NaN
,取其值,否则检查第二个,依此类推。
自从一个NaN
值不是一个False
, the 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
想法是回填缺失值,然后选择第一列:
df["all columns"] = df.bfill(axis=1).iloc[:, 0]
如果需要过滤列名称:
df["a_or_b_or_c"] = df[['a','b','c']].bfill(axis=1).iloc[:, 0]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)