用最后一个已知值填充时间序列列值
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
.
你可以用 mask
和 update
做 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)
我有一个 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
.
你可以用 mask
和 update
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)