【问题标题】:How do I transform a pandas daily dataframe into average of monthly maximums?如何将熊猫每日数据框转换为每月最大值的平均值?
【发布时间】:2022-06-30 23:41:28
【问题描述】:

我有一个显示 1973 年至 2013 年间每日降雨量的数据框,如下所示:

            tp1
time           
1973-04-01  0.1
1973-07-01  0.4
1973-08-01  0.0
1973-12-01  0.5
1973-01-17  0.0
        ...
2013-10-09  0.0
2013-11-09  0.2
2013-12-09  0.0
2013-09-13  0.4
2013-09-14  0.0

[6432 rows x 1 columns]

我试图计算出每年每个月的最大日降雨量,然后取多年来每个月值的平均值,因此最终数据报将仅包含 12 行,格式如下:

      Average of Maximum Daily Rainfall in each Month
Jan       x
Feb       x
March     x 
April     x
May       x
June      x
Jul       x
....

我尝试了以下命令:

data = df.groupby(df.index.month).max()

但是,我认为这是在绘制最大值的最大值,而不是我想要的最大值的平均值。

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

您可以先 groupby yearmonth 获得月份的最大值,然后 groupby month 获得平均年份。

out = df.groupby(df.index.strftime('%Y-%m')).max()
out.index = pd.to_datetime(out.index)
print(out)

            tp1
1973-01-01  0.0
1973-04-01  0.1
1973-07-01  0.4
1973-08-01  0.0
1973-12-01  0.5
2013-09-01  0.4
2013-10-01  0.0
2013-11-01  0.2
2013-12-01  0.0
res = out.groupby(out.index.strftime('%b')).mean()
print(res)

      tp1
Apr  0.10
Aug  0.00
Dec  0.25
Jan  0.00
Jul  0.40
Nov  0.20
Oct  0.00
Sep  0.40

【讨论】:

    【解决方案2】:

    ####重置索引

    df = df.reset_index().rename(columns = {'index':'timestamp'})

    ####(可选)如果时间戳是str格式(转换为日期时间格式)

    df['timestamp'] = pd.to_datetime(df['timestamp'],format = '%Y-%m-%d %H:%M:%S')

    ####获取月份和年份

    从日期时间导入日期时间

    df['month'] = df['timestamp'].apply(lambda x:x.strftime('%b'))

    df['year'] = df['timestamp'].apply(lambda x:x.strftime('%Y'))

    ####得到每个month_year的最大降雨量

    df2 = df.groupby(['month','year']).max()['tp1'].reset_index()

    ####按月平均

    df2 = df2.groupby('month').mean()['tpi1'].reset_index()

    ####注意,我没有尝试上面的代码,但希望你能从中得到一些想法。周全

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2019-12-20
      • 1970-01-01
      • 2020-08-09
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多