gpt4 book ai didi

python - Pandas:向前填充而不填充尾随 NaN

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:54 25 4
gpt4 key购买 nike

我有一个数据框,其中每一列都是不同长度的时间序列。因此,时间序列中的值之间以及每个时间序列末尾保存一列时都存在缺失值。我想填充值之间的缺失值,但不填充“尾随”NaN

使用 df = df.fillna(method='ffill') 让我完成了大部分工作,但填充了尾随的 NaN,这是我不想要的,因为数据结束的地方实际上对我的分析很重要。

编辑:

我想把这个:

            ERICB SS Equity  DCI US Equity  FLEX US Equity
date

2008-02-14 8.026 NaN NaN
2008-02-18 NaN NaN 1.472
2008-02-19 8.074 NaN NaN
2008-02-22 NaN NaN 1.532
2008-02-25 8.062 NaN NaN
2008-03-03 8.100 NaN NaN
2008-03-06 8.100 NaN 1.955
2008-03-07 8.100 NaN NaN
2010-12-30 5.431 NaN NaN
2010-12-31 5.422 NaN NaN
2011-01-03 5.422 NaN NaN
2011-01-04 5.373 NaN NaN

进入这个:

            ERICB SS Equity  DCI US Equity  FLEX US Equity
date

2008-02-14 8.026 NaN NaN
2008-02-18 8.026 NaN 1.472
2008-02-19 8.074 NaN 1.472
2008-02-22 8.074 NaN 1.532
2008-02-25 8.062 NaN 1.532
2008-03-03 8.100 NaN 1.532
2008-03-06 8.100 NaN 1.955
2008-03-07 8.100 NaN NaN
2010-12-30 5.431 NaN NaN
2010-12-31 5.422 NaN NaN
2011-01-03 5.422 NaN NaN
2011-01-04 5.373 NaN NaN

所以它是向前填充的,但只有当将来有一些非空值要填充时,才会留下尾随的空值。

最佳答案

一种方法是 bfill,它使最后一个非 NaN 值之前的所有内容都为非 NaN,然后​​使用 where 选择 ffill() 结果:

In [45]: df.ffill().where(df.bfill().notnull())
Out[45]:
date ERICB SS Equity DCI US Equity FLEX US Equity
0 2008-02-14 8.026 NaN NaN
1 2008-02-18 8.026 NaN 1.472
2 2008-02-19 8.074 NaN 1.472
3 2008-02-22 8.074 NaN 1.532
4 2008-02-25 8.062 NaN 1.532
5 2008-03-03 8.100 NaN 1.532
6 2008-03-06 8.100 NaN 1.955
7 2008-03-07 8.100 NaN NaN
8 2010-12-30 5.431 NaN NaN
9 2010-12-31 5.422 NaN NaN
10 2011-01-03 5.422 NaN NaN
11 2011-01-04 5.373 NaN NaN

另一种方法是直接为直到并包括最后一个有效值的所有值制作一个包含 True 的掩码:

df.ffill().where(df.notnull().iloc[::-1].cummax().iloc[::-1])

.iloc[::-1] 是必需的,因为我找不到更好的方法在自下而上的方向上进行累积操作。

关于python - Pandas:向前填充而不填充尾随 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52281660/

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