[英]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.