Pandas-填充nans直到第一个非NULL值



我有一个类似的数据帧

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

使用pandas.DataFrame.ffillnotnawhere的技巧位:

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

这将使用wheremask来完成。

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

这里有很多剥猫皮的方法:-(

由于0+nan是nan,因此这是有效的:

xf = df.fillna(0) + df.bfill()*0

上面的好答案。或者,如果您想对特定列执行此操作:

df[columnName][:df[columnName].first_valid_index()].fillna(0, inplace=True)

相关内容

  • 没有找到相关文章

最新更新