【发布时间】:2021-12-05 12:28:49
【问题描述】:
我有不同测量频率的时间序列数据。我想将数据转换为或多或少天数的频率。生成的时间序列可能是不规则的。
例如,我有这个时间序列:
| Date | Value |
|---|---|
| 2017-02-16 | 26.17000 |
| 2017-02-27 | 26.28000 |
| 2017-03-13 | 26.30000 |
| 2017-03-29 | 26.23000 |
| 2017-04-14 | 26.19000 |
| 2017-04-26 | 26.06000 |
| 2017-05-13 | 26.06000 |
| 2017-05-27 | 25.65000 |
| 2017-06-16 | 25.29000 |
| 2017-07-05 | 25.25000 |
| 2017-07-14 | 25.48000 |
| 2017-07-26 | 25.57000 |
| 2017-08-17 | 25.16000 |
| 2017-08-28 | 25.33000 |
| 2017-09-12 | 25.68235 |
| 2017-09-13 | 25.83799 |
| 2017-09-14 | 25.76669 |
| 2017-09-15 | 25.85253 |
| 2017-09-16 | 25.82017 |
| 2017-09-17 | 25.78362 |
| 2017-09-18 | 25.88422 |
| 2017-09-19 | 25.89594 |
| 2017-09-20 | 25.85522 |
| 2017-09-21 | 25.83583 |
| 2017-09-22 | 25.80082 |
| 2017-09-23 | 25.80076 |
| 2017-09-24 | 25.79209 |
| 2017-09-25 | 25.80632 |
| 2017-09-26 | 25.77773 |
| 2017-09-27 | 25.76311 |
一开始,测量的频率约为 14 天。后来,频率是每天。我想将其更改为大约 14 天的频率,但我想保留日期。
我试过了:
serie.reindex(index=serie.asfreq('14d').index,method='nearest',tolerance=datetime.timedelta(3))
我得到了这个结果:
| Date | Value |
|---|---|
| 2017-02-16 | 26.17000 |
| 2017-03-02 | 26.28000 |
| 2017-03-16 | 26.30000 |
| 2017-03-30 | 26.23000 |
| 2017-04-13 | 26.19000 |
| 2017-04-27 | 26.06000 |
| 2017-05-11 | 26.06000 |
| 2017-05-25 | 25.65000 |
| 2017-06-08 | NaN |
| 2017-06-22 | NaN |
| 2017-07-06 | 25.25000 |
| 2017-07-20 | NaN |
| 2017-08-03 | NaN |
| 2017-08-17 | 25.16000 |
| 2017-08-31 | 25.33000 |
| 2017-09-14 | 25.76669 |
| 2017-09-28 | 25.73150 |
这或多或少是我想要的。 “值”列中的值是我正在寻找的。只有我想要与值对应的原始日期。我怎样才能做到这一点?非常感谢您!这是我想要的结果:
| Date | Value |
|---|---|
| 2017-02-16 | 26.17000 |
| 2017-02-27 | 26.28000 |
| 2017-03-13 | 26.30000 |
| 2017-03-29 | 26.23000 |
| 2017-04-14 | 26.19000 |
| 2017-04-26 | 26.06000 |
| 2017-05-13 | 26.06000 |
| 2017-05-27 | 25.65000 |
| 2017-06-08 | NaN |
| 2017-06-22 | NaN |
| 2017-07-05 | 25.25000 |
| 2017-07-20 | NaN |
| 2017-08-03 | NaN |
| 2017-08-17 | 25.16000 |
| 2017-08-28 | 25.33000 |
| 2017-09-14 | 25.76669 |
| 2017-09-28 | 25.73150 |
【问题讨论】:
-
运行您尝试的代码,我没有得到日期
2017-09-28的最后一行条目。你能检查一下吗? -
对不起@SeaBean,那是因为我没有显示完整的输入数据,只有相关的(我认为)。很抱歉造成混乱。
-
没问题@hotoats。看看我的解决方案是否适用于您的完整数据。请在查看我的答案后告诉我。
标签: python pandas time-series