【问题标题】:Interpolating missing values for time series based on the values of the same period from a different year根据不同年份的同一时期的值对时间序列的缺失值进行插值
【发布时间】:2020-04-04 13:01:36
【问题描述】:

我有一个如下的时间序列:

date        value
2017-08-27  564.285714
2017-09-03  28.857143
2017-09-10  NaN
2017-09-17  NaN
2017-09-24  NaN
2017-10-01  236.857143
... ...
2018-09-02  345.142857
2018-09-09  288.714286
2018-09-16  274.000000
2018-09-23  248.142857
2018-09-30  166.428571

它对应于 2017 年 7 月至 2019 年 11 月的范围,并按周重新采样。但是,有几个星期的值是 0。我替换了它,因为那里的值丢失了,现在我想根据不同年份的同源时期的值来感受这些值。例如,我缺少 2017 年 9 月的大量数据。我想使用 2018 年 9 月的值对这些值进行插值。但是,我是新手,我不太确定要这样做仅基于选定的时期。顺便说一句,我正在使用 python。

如果有人知道如何快速做到这一点,我将不胜感激。

【问题讨论】:

  • 您可以将数据读入 pandas 数据框,然后使用 pandas.DataFrame.loc[index - <period>]pandas.DataFrame.fillna() 等工具。请在此处查看 pandas 文档:pandas.pydata.org/pandas-docs/stable/getting_started/…
  • 您可以编辑 2018 年 10 月和 2017 年 10 月的样本数据吗?
  • @PrinceFrancis 完成(实际上是 9 月,对此感到抱歉,已经更改)

标签: python time-series interpolation


【解决方案1】:

如果您对pandas 库感到满意 一种选择是从date 中找到week 数字并填充NaN 值。

df['week'] = pd.to_datetime(df['date'], format='%Y-%m-%d').dt.strftime("%V")
df2 = df.sort_values(['week']).fillna(method='bfill').sort_values(['date'])
df2

这将为您提供以下输出。

    date    value   week
0   2017-08-27  564.285714  34
1   2017-09-03  28.857143   35
2   2017-09-10  288.714286  36
3   2017-09-17  274.000000  37
4   2017-09-24  248.142857  38
5   2017-10-01  236.857143  39
6   2018-09-02  345.142857  35
7   2018-09-09  288.714286  36
8   2018-09-16  274.000000  37
9   2018-09-23  248.142857  38
10  2018-09-30  166.428571  39

【讨论】:

    【解决方案2】:

    在熊猫中:

    df['value'] = df['value'].fillna(df['value_last_year'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2016-07-28
      • 2018-05-14
      • 1970-01-01
      • 2016-12-08
      相关资源
      最近更新 更多