Pandas- 将NaN值填充到第一个非空值为止

11
我有一个数据框,像这样:

I have a dataframe like


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
4个回答

7

使用pandas.DataFrame.ffill,结合notnawhere有一些技巧:

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

太棒了!我不知道插值这个功能。非常有用。 - Étienne Célèry

5

可以使用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

以上回答都很好。或者,如果您想针对特定列执行此操作:

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

0

由于 0 + nan 是 nan,因此这个代码可以正常工作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接