熊猫排明智的填充

问题描述 投票:0回答:1

是否可以为整行指定ffill?我的意思是,在行中调整一个值[Check]以查看该行是否应该是fforwardfilled。

我的主要目标是保持行完整性(即我只想将整行转发到下一行)。为简单起见,假设每行对应一个事件,如果新事件没有数据(在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

应保持不变。

python pandas
1个回答
1
投票

用于每列仅替换一个NaNs - 替换最合适的所有值,然后检查连续的NaNs,由mask设置为NaNs:

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
© www.soinside.com 2019 - 2024. All rights reserved.