簡體   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