获取 pandas 的月平均值

M.E*_*.E. 8 python datetime dataframe pandas

我有以下时间序列:

        Date        Value
0       2006-01-03  18
1       2006-01-04  12
2       2006-01-05  11
3       2006-01-06  10
4       2006-01-09  22
...     ...     ...
3510    2019-12-23  47
3511    2019-12-24  46
3512    2019-12-26  35
3513    2019-12-27  35
3514    2019-12-30  28
Run Code Online (Sandbox Code Playgroud)

我想计算每月的平均值。所以每个月的伪代码如下:

  1. 将该月中每天的所有值相加
  2. 除以该月数据的天数。

所需的输出类似于:

        Date        Value
0       2006-01     17.45
1       2006-02     18.23
2       2006-04     16.79
3       2006-05     17.98
...     ...     ...
166     2019-11     37.89
167     2019-12     36.34
Run Code Online (Sandbox Code Playgroud)

我尝试过这个但没有成功:

data = data.set_index('Date')
data.resample('M')

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-28-435afe449f1f> in <module>
     47 data = pd.DataFrame(dataList, columns=('Date', 'Value'))
     48 data = data.set_index('Date')
---> 49 data.resample('M')
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 13

我们可以将您的日期时间列转换为PeriodIndex每月频率,然后使用以下方法取平均值GroupBy.mean

df.groupby(pd.PeriodIndex(df['Date'], freq="M"))['Value'].mean()
    
Date
2006-01    14.6
2019-12    38.2
Freq: M, Name: Value, dtype: float64
Run Code Online (Sandbox Code Playgroud)
df.groupby(pd.PeriodIndex(df['Date'], freq="M"))['Value'].mean().reset_index()

      Date  Value
0  2006-01   14.6
1  2019-12   38.2
Run Code Online (Sandbox Code Playgroud)

这种方法的一个警告是没有显示缺失的月份。如果这很重要,请以相同的方式使用set_index和。resample.mean


N P*_*iro 10

您可以尝试这样的操作,甚至不需要更改索引:

data_month = data.resample('M', on='Date').mean()

请注意,重新采样本身并不能解决问题。是.mean()必需的。

有关文档的更多信息:)