【问题标题】:Rolling moving average using Datetime.Offset使用 Datetime.Offset 滚动移动平均线
【发布时间】:2021-07-11 07:26:02
【问题描述】:

我有一个时间序列的每日数据,我想取某个时期的滚动平均值。 Datetime.Offset 可以做到这一点吗?

代码可能如下所示:

l = [7.71, 7.79, 6.80, 6.44, 6.46, 6.80] 

index = pd.DatetimeIndex(['2016-01-04', '2016-01-05', '2016-01-06', 
                      '2017-01-04' ,'2017-01-05' ,'2017-01-06'])

df = pd.DataFrame(l, columns=['col'], index = index) 

我想要计算时间序列的年平均值。使用上述数字,输出应如下所示:

2017-01-04  7.185
2017-01-05  6.873
2017-01-05  6.625 

我试着写成这样

df.rolling(window=1, freq='A').mean()

但收到以下错误消息:

TypeError: rolling() got an unexpected keyword argument 'freq'

我也尝试了以下方法:

do = pd.DateOffset(years = 1)

eps.rolling(window=do).mean()

但收到以下错误消息:

ValueError: <DateOffset: years=1> is a non-fixed frequency

这可能与rollong有关还是我应该尝试其他方法?

【问题讨论】:

  • 您能否确认所需的输出是如何计算的?

标签: python pandas rolling-computation datetimeoffset


【解决方案1】:

您的错误的原因是 rolling 没有采用 freq 参数。要使用年度滚动窗口,您必须使用365D,如here 所述。问题是1Y 可能有不同的天数,即频率是“非固定的”。

在你的情况下,这将转化为

df.rolling('365D').mean()

【讨论】:

    【解决方案2】:

    首先将您的索引转换为 DatetimeIndex。

    df.index = pd.to_datetime(df.index)
    

    按月和日分组并计算平均值

    df_ = df.groupby([df.index.month, df.index.day]).mean()
    
    # print(df_)
    
           col
    1 4  7.075
      5  7.125
      6  6.800
    

    如果你想得到一个正常的索引,你可以这样做

    df_ = df.groupby([df.index.month, df.index.day]).mean()
    df_ = df_.reset_index()
    df_['month-day'] = df_['level_0'].astype(str) + '-' + df_['level_1'].astype(str)
    df_.drop(['level_0', 'level_1'], axis=1, inplace=True)
    
    # print(df_)
    
         col month-day
    0  7.075       1-4
    1  7.125       1-5
    2  6.800       1-6
    

    或者您可以创建一个带有月份和日期的新列

    df['month-day'] = df.index.strftime('%m-%d')
    df_ = df.groupby('month-day').mean().reset_index()
    
    # print(df_)
    
      month-day    col
    0     01-04  7.075
    1     01-05  7.125
    2     01-06  6.800
    

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2021-07-10
      • 2014-11-29
      相关资源
      最近更新 更多