gpt4 book ai didi

python pandas 在最后一个非 NaN 值处停止 fillna

转载 作者:行者123 更新时间:2023-12-01 23:33:57 25 4
gpt4 key购买 nike

我有一个数据框,其中索引是按日期递增的,列是对变量的观察。阵列是稀疏的。我的目标是及时向前传播一个已知值来填充 NaN,但我想在最后一个非 NaN 值处停止,因为最后一个值表示变量的“死亡”。

例如对于数据集

<表类="s-表"><头><日> 一个bc<正文>2020-01-01NaN11NaN2020-02-011NaNNaN2020-03-01NaNNaN142020-04-012NaNNaN2020-05-01NaNNaNNaN2020-06-01NaNNaN152020-07-013NaNNaN2020-08-01NaNNaNNaN

我要输出

<表类="s-表"><头><日> 一个bc<正文>2020-01-01NaN11NaN2020-02-011NaNNaN2020-03-011NaN142020-04-012NaN142020-05-012NaN142020-06-012NaN152020-07-013NaNNaN2020-08-01NaNNaNNaN

我可以使用 df.notna()[::-1].idxmax() 识别最后一次观察的索引但无法弄清楚如何使用它来限制 fillna功能

如果有任何建议,我将不胜感激。非常感谢

最佳答案

使用DataFrame.where通过掩码进行前向填充 - 通过向后填充仅测试非缺失值:

df = df.where(df.bfill().isna(), df.ffill())
print (df)
a b c
2020-01-01 NaN 11.0 NaN
2020-02-01 1.0 NaN NaN
2020-03-01 1.0 NaN 14.0
2020-04-01 2.0 NaN 14.0
2020-05-01 2.0 NaN 14.0
2020-06-01 2.0 NaN 15.0
2020-07-01 3.0 NaN NaN
2020-08-01 NaN NaN NaN

如果通过广播比较 Series 转换为 numpy 数组,也应该使用您的解决方案:

mask = df.notna()[::-1].idxmax().to_numpy() < df.index.to_numpy()[:, None]
df = df.where(mask, df.ffill())
print (df)
a b c
2020-01-01 NaN 11.0 NaN
2020-02-01 1.0 NaN NaN
2020-03-01 1.0 NaN 14.0
2020-04-01 2.0 NaN 14.0
2020-05-01 2.0 NaN 14.0
2020-06-01 2.0 NaN 15.0
2020-07-01 3.0 NaN NaN
2020-08-01 NaN NaN NaN

关于python pandas 在最后一个非 NaN 值处停止 fillna,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65886163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com