【问题标题】:Using higher frequency data as a proxy for lower-frequency data使用高频数据作为低频数据的代理
【发布时间】:2025-11-24 02:15:02
【问题描述】:

我有两个时间系列 - 年度和季度。年度数据在 2018 年结束,但季度数据持续到 2019 年第三季度。将两者结合起来的最佳方式是什么,Python 检查最新的可用季度和年度数据,并用最新的季度值填充年度时间序列?

这就是我的想法:

Data_ann
2013 5.1
2014 3.2
2015 2.1
2016 2.2
2017 2.1
2018 4.2
2019 n/a

Data_qtr
...
2018q1 2.5 
2018q2 2.2
2018q3 3.7
2018q4 4.2
2019q1 1.2
2019q2 2.3
2019q3 n/a

结果

2013 5.1
2014 3.2
2015 2.1
2016 2.2
2017 2.1
2018 4.2
2019 2.3

【问题讨论】:

    标签: python pandas time-series


    【解决方案1】:

    您可以使用DatetimeIndex 组织数据。年度框架就可以了(如果每年有一行),但是对于季度 DataFrame,我们需要获取每年的最后一个值,使用resample.last 完成。 combine_first 在我们加入时给予我们年度 DataFrame 的优先权。

    数据准备

    df_ann = pd.read_clipboard(header=None)
    df_ann.columns = ['date', 'value']
    df_ann['date'] = pd.to_datetime(df_ann['date'], format='%Y')
    df_ann = df_ann.set_index('date')
    #            value
    #date             
    #2013-01-01    5.1
    #2014-01-01    3.2
    #2015-01-01    2.1
    #2016-01-01    2.2
    #2017-01-01    2.1
    #2018-01-01    4.2
    #2019-01-01    NaN
    
    df_qtr = pd.read_clipboard(header=None)
    df_qtr.columns = ['date', 'value']
    df_qtr['date'] = pd.to_datetime(df_qtr['date'])
    df_qtr = df_qtr.set_index('date')
    #            value
    #date             
    #2018-01-01    2.5
    #2018-04-01    2.2
    #2018-07-01    3.7
    #2018-10-01    4.2
    #2019-01-01    1.2
    #2019-04-01    2.3
    #2019-07-01    NaN
    

    代码

    df_ann.to_period('Y').combine_first(df_qtr.resample('Y').last().to_period('Y'))
    
          value
    date       
    2013    5.1
    2014    3.2
    2015    2.1
    2016    2.2
    2017    2.1
    2018    4.2
    2019    2.3
    

    【讨论】:

    • 当我运行代码时,我收到一条错误消息:raise ValueError(_INVALID_FREQ_ERROR.format(freq)) ValueError: Invalid frequency: Y
    • @Ziablik 如果您将所有这些中的'Y' 更改为'A',它是否有效?你运行的是什么版本的熊猫?
    • 我正在使用 Python 3.6 并将“Y”更改为“A”确实很有魅力!非常感谢!