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 ?
对不起,如果这个问题很明显。
尝试:
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。