熊猫按行填充

时间:2018-09-24 08:55:48

标签: python pandas

是否可以为整行指定填充?我的意思是,以该行中的一个值[Check]为条件,以查看该行是否应该向前填充。

我的主要目标是保持行的完整性(即,我只想将整个行向前填充到下一行)。为了简单起见,假设每一行都对应一个事件,如果新事件没有数据(在Val1中),我想从过去的事件中预填充数据。我不想混用过去事件中的数据,因为我应该预先填充它,即nan值可能是事件的合法值,也应该预先填充。

第一个示例

    Check   Val1    Val2    Val3    Val4
0   2.00    3.00    2.00    2.00    3.00
1   2.00    4.00    nan     3.00    4.00
2   2.00    nan     nan     nan     nan
3   2.00    2.00    4.00    3.00    3.00

应该成为

    Check   Val1    Val2    Val3    Val4
0   2.00    3.00    2.00    2.00    3.00
1   2.00    4.00    nan     3.00    4.00
2   2.00    4.00    nan     3.00    4.00
3   2.00    2.00    4.00    3.00    3.00

而不是:

    Check   Val1    Val2    Val3    Val4
0   2.00    3.00    2.00    2.00    3.00
1   2.00    4.00    2.00    3.00    4.00
2   2.00    4.00    2.00    3.00    4.00
3   2.00    2.00    4.00    3.00    3.00

第二个示例:

    Check   Val1    Val2    Val3    Val4
0   2.00    3.00    2.00    2.00    3.00
1   2.00    4.00    nan     3.00    4.00
2   2.00    4.00    nan     nan     nan
3   2.00    2.00    4.00    3.00    3.00

应保持不变。

1 个答案:

答案 0 :(得分:1)

仅用于替换每列一个NaN s-替换所有值,然后检查连续的NaN,它们由mask设置为NaN s:< / p>

df = df.ffill().mask((df.ffill(limit=1) * df.bfill(limit=1)).isnull())
print (df)
     0    1    2    3    4
0  2.0  3.0  2.0  2.0  3.0
1  2.0  4.0  NaN  3.0  4.0
2  2.0  4.0  NaN  3.0  4.0
3  2.0  2.0  4.0  3.0  3.0