更改熊猫的轴替换填充

Posted

技术标签:

【中文标题】更改熊猫的轴替换填充【英文标题】:Change axis for pandas replace ffill 【发布时间】:2018-11-27 11:08:28 【问题描述】:

假设我有一个如下所示的数据框:

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() 不接受轴参数,因此要获得与上述相同的结果,我需要调用df.T.replace(-1, method='ffill').T。由于转置非常昂贵(特别是考虑到我正在处理数 GB 的数据帧),所以这不是一个选择。我怎样才能达到预期的效果?

【问题讨论】:

【参考方案1】:

IIUC,将maskffillaxis=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】:

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

【讨论】:

你的也一样 (-:【参考方案3】:

您可以在使用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

【讨论】:

以上是关于更改熊猫的轴替换填充的主要内容,如果未能解决你的问题,请参考以下文章

用不同的随机数填充熊猫数据框中所有出现的值

熊猫中的条件替换

如何在熊猫数据框中仅填充选定列的空值? [复制]

熊猫系列 any() vs all()

熊猫填充模式

从多个字典填充熊猫数据框