假设我的数据框如下:
df =
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 NaN
2 6.0 NaN NaN
然后可以使用df.fillna(method='ffill', axis=1)
获取:
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
即。我向前填充行。
但是,现在我的数据框号为-1
而不是np.nan
。 Pandas有replace
函数也有可能使用method='ffill'
,但replace()
不接受轴参数,所以要获得与上面相同的结果,我需要调用{ {1}}。由于转置非常昂贵(特别是考虑到我正在处理数千兆字节的数据帧),这不是一个选择。我怎样才能达到预期的效果?
答案 0 :(得分:4)
使用mask
和ffill
df.mask(df.eq(-1)).ffill(axis=1)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
答案 1 :(得分:3)
IIUC,mask
使用ffill
和axis=1
:
df1 = df.fillna(-1.0)
df1.mask(df1 == -1).ffill(1)
输出:
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
答案 2 :(得分:2)
在使用pd.DataFrame.ffill
之前,您可以将-1
值转换为NaN
:
print(df)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 -1.0
2 6.0 -1.0 -1.0
res = df.replace(-1, np.nan)\
.ffill(axis=1)
print(res)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0