python - 最后一次观察一年后的前向填充列
问题描述
我使用以下 df 转发填充值:
df = (df.resample('d') # ensure data is daily time series
.ffill()
.sort_index(ascending=True))
df before forward fill
id a b c d
datadate
1980-01-31 NaN NaN NaN NaN
1980-02-29 NaN 2 NaN NaN
1980-03-31 NaN NaN NaN NaN
1980-04-30 1 NaN 3 4
1980-05-31 NaN NaN NaN NaN
... ... ... ...
2019-08-31 NaN NaN NaN NaN
2019-09-30 NaN NaN NaN NaN
2019-10-31 NaN NaN NaN NaN
2019-11-30 NaN NaN NaN NaN
2019-12-31 NaN NaN 20 33
但是,我希望只在最后一次观察(日期是日期时间)之后的一年前向前填充,然后剩下的行只是 NaN。我不确定在此任务中引入此标准的最佳方法是什么。任何帮助都会很棒!
谢谢
解决方案
如果我理解正确,您希望将 2019 年 12 月 31 日的值转发到下一年。尝试这个:
end_date = df.index.max()
new_end_date = end_date + pd.offsets.DateOffset(years=1)
new_index = df.index.append(pd.date_range(end_date, new_end_date, closed='right'))
df = df.reindex(new_index)
df.loc[end_date:, :] = df.loc[end_date:, :].ffill()
结果:
a b c d
1980-01-31 NaN NaN NaN NaN
1980-02-29 NaN 2.0 NaN NaN
1980-03-31 NaN NaN NaN NaN
1980-04-30 1.0 NaN 3.0 4.0
1980-05-31 NaN NaN NaN NaN
2019-08-31 NaN NaN NaN NaN
2019-09-30 NaN NaN NaN NaN
2019-10-31 NaN NaN NaN NaN
2019-11-30 NaN NaN NaN NaN
2019-12-31 NaN NaN 20.0 33.0
2020-01-01 NaN NaN 20.0 33.0
2020-01-02 NaN NaN 20.0 33.0
...
2020-12-31 NaN NaN 20.0 33.0
推荐阅读
- java - 从主类或启动侦听器中运行一个短暂的 Spring Boot 应用程序?
- android - Kivy 屏幕背景在屏幕切换期间不加载
- python - 刚开始在这里编码的神经科学家,试图在 pandas 中分析一个具有非标准格式的大型 CSV 表?
- node.js - npm 脚本的参数
- c# - 在记录器中检测异常
- opennlp - openNlp 自定义 NER 模型精度
- python - 如何评估 jinja 字典中的变量
- javascript - 如何通过比较同一数组中的两个键从数组中删除重复对象?
- c++ - 构造函数和析构函数对 vTable 的未定义引用
- okhttp - 超过 30 秒的 connectTimeout 对 OKHTTP 不起作用