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