我有一个类似的数据框
A B C
1 nan nan
2 nan 5
3 3 nan
4 nan nan
如何只填充每个系列的NULL(以0表示),直到第一个非NULL值,导致
A B C
1 0 0
2 0 5
3 3 nan
4 nan nan
答案 0 :(得分:6)
这将使用where
或mask
完成。
df.mask(df.notna().cumsum().eq(0), 0)
# or,
df.where(df.notna().cumsum().ne(0), 0)
A B C
0 1 0.0 0.0
1 2 0.0 5.0
2 3 3.0 NaN
3 4 NaN NaN
许多在这里给猫皮的方法:-)
答案 1 :(得分:6)
结合使用pandas.DataFrame.ffill
和notna
和where
的技巧:
df.where(df.ffill().notna(), 0)
或使用pandas.DataFrame.interpolate
:
df.interpolate('zero', fill_value=0, limit_direction='backward')
输出:
A B C
0 1 0.0 0.0
1 2 0.0 5.0
2 3 3.0 NaN
3 4 NaN NaN
答案 2 :(得分:0)
由于0 + nan是nan,因此可以正常工作
xf = df.fillna(0) + df.bfill()*0
答案 3 :(得分:0)
上面的好答案。或者,如果您想对特定的列执行此操作:
df[columnName][:df[columnName].first_valid_index()].fillna(0, inplace=True)