繁体   English   中英

如何平均每月数据以获得 Python 中的年度值?

[英]How do I average monthly data to get yearly values in Python?

我有一个如下所示的数据集:

日期 价值
1871-01 4.5
1871-02 10.7
1871-03 8.9
1871-04 1.3

一直到 2021-12 学年。

如何在 Python 中获得每年的平均值? 例如,1871 年的平均值将是从 1871-01 到 1871-1 的所有值的平均值,我希望它适用于从 1871 年到 2021 年的所有年份。 ……

鉴于您的数据位于名为 df 的 pandas 数据框中:

>>> df
    Date        Value
0   1871-01     4.5
1   1871-02     10.7
2   1871-03     8.9
3   1871-04     1.3
4   1872-02     1.5
5   1872-03     15.9
6   1872-04     7.3
>>> year_df = df.set_index(pd.to_datetime(df['Date'])).groupby(pd.Grouper(freq='Y')).mean()
>>> year_df.index = year_df.index.year
>>> year_df
Date    Value
1871    6.35
1872    8.233333333333333

取决于向您提供数据的格式。 是json吗? .csv? 如果您已经知道如何使用 python 导入和读取数据。您只需将年份分配给变量并对其进行平均。 (x1 + x2 + x3) / (平均变量数)

使用值创建一个 numpy 数组,重塑并使用 np.mean。

仅具有 3 年“数据”价值的示例

import numpy as np

values=np.random.normal(0,1,36)
yearly_avgs=np.mean(values.reshape((len(values)//12,12)),axis=1)

这将帮助您根据多年的月平均值获得所有数据的平均值。 在此方法中,无需将date设置为索引,并将返回单级数据帧,如输出所示。

import pandas as pd
import numpy as np
df=pd.DataFrame({"date":pd.date_range("1871-01","2021-12",freq="M"),"val":np.random.randint(10,100,[1811])}) # 1811 months
df[df["date"].dt.year==1871].mean() # 57.666667
df.groupby(pd.PeriodIndex(df["date"],freq="y"))["val"].mean().reset_index()

即使date特征是str数据类型,上述方法也将返回相同的输出。

鉴于列/功能是date类型,以下将返回相同的输出。

df.groupby(df["date"].dt.year)["val"].mean().reset_index()

输出.head()

日期
0 1871 57.666667
1 1872年 58.916667
2 1873年 52.416667
3 1874年 41.666667
4 1875年 57.583333

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM