【问题标题】:Pandas- Fill nans up until first non NULL valuePandas- 填充 nans 直到第一个非 NULL 值
【发布时间】:2019-11-01 05:04:58
【问题描述】:
我有一个类似的数据框
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
【问题讨论】:
标签:
python
pandas
dataframe
null
【解决方案1】:
使用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】:
这将使用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
这里有很多剥猫皮的方法:-)
【解决方案3】:
由于 0 + nan 是 nan 这有效:
xf = df.fillna(0) + df.bfill()*0
【解决方案4】:
上面的好答案。或者,如果您想为特定列执行此操作:
df[columnName][:df[columnName].first_valid_index()].fillna(0, inplace=True)