更改pandas的轴更换ffill

时间:2018-06-18 14:54:01

标签: python pandas dataframe fillna

假设我的数据框如下:

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}}。由于转置非常昂贵(特别是考虑到我正在处理数千兆字节的数据帧),这不是一个选择。我怎样才能达到预期的效果?

3 个答案:

答案 0 :(得分:4)

使用maskffill

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使用ffillaxis=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