Pandas dataframe 避免遍历列和行

Pandas dataframe avoid looping through columns and rows

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

一个 B 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?

抱歉,如果这个问题很明显。

尝试:

df["D"] = df.bfill(axis=1)["A"] * 3
print(df)

打印:

     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

解释:

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