用最后一个已知值填充时间序列列值

Filling time series column values with last known value

我有一个 Pandas 时间序列数据框,如下所示:

id .. .. ..(some cols) 1/1/20 1/2/20 1/3/20 1/4/20 1/5/20 1/6/20 ....
1                      10     20     0      40     0      50
2                      10     30     30     0      0      50
.
.

我想 ffill 具有最后已知值的列中的 0 得到如下内容:

id .. .. ..(some cols) 1/1/20 1/2/20 1/3/20 1/4/20 1/5/20 1/6/20 ....
1                      10     20     20     40     40      50
2                      10     30     30     30     30      50
.
.

假设 id 和时间序列列之间还有一些其他列,我如何 ffill 这样的数据框?我知道 df.ffill(axis = 1) 之类的东西适用于 Null 值,但我找不到任何东西来修改它以使用 0.

你可以用 maskupdate

ffill
df.update(df.filter(like='/').mask(lambda x : x==0).ffill(1))

也许我的解决方案可能有点幼稚,但您可以将您感兴趣的值转换为 nan,然后使用 fillna 方法。就像这样:

import pandas as pd
import numpy as np

df = pd.DataFrame(dict(col1=[1,2,3,4,5],col2=[3,0,3,5,0],col3=[0,2,0,0,1]))
df[df==0]=np.nan
df.fillna(method='ffill',axis=1)