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。
我有一个包含几列的 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。