Pandas 数据框避免遍历列和行

PDi*_*stl 0 python performance loops apply pandas

我有一个带有几列的 df,看起来有点像这样:

一种 C
NaN 3 2
6 4 NaN
2 4 NaN
1 NaN NaN
NaN NaN NaN
... ... ...

我现在想创建一个新列,它是列 'A' 乘以标量 ( df['D'] = df['A']*3 ),但仅适用于没有 NaN 的那些行。在有 NaN 值的行中,我想使用 B 列的同一行,如果还有 NaN 我想使用 C 列,依此类推。如果所有列都有 NaN,则该值也应该是 NaN。

我可以使用 for 循环,逐行检查上述 if 语句,但这对于大 df 来说似乎非常低效。有没有更有效的方法可以在这里使用?也许以某种方式使用 df.apply ?

对不起,如果这个问题很明显。

And*_*ely 5

尝试:

df["D"] = df.bfill(axis=1)["A"] * 3
print(df)
Run Code Online (Sandbox Code Playgroud)

印刷:

     A    B    C     D
0  NaN  3.0  2.0   9.0
1  6.0  4.0  NaN  18.0
2  2.0  4.0  NaN   6.0
3  1.0  NaN  NaN   3.0
4  NaN  NaN  NaN   NaN
Run Code Online (Sandbox Code Playgroud)

解释:

您想将“A”列中的非 NaN 值相乘。因此,让我们首先尝试从值到“A”填充“A”中的所有 NaN 值。我们bfill()在任务的行上使用方法(回填)。然后将“A”列乘以 3。