首页 > 解决方案 > 我想计算特定月份的熊猫列的平均值

问题描述

让 df 与列year, month, all time, daytime, region, temp, 并precipitation包含几年和地区的数据:

year  month alltime daytime   region        temp            precipitation
2000    1   True    False   saint louis 21.3105241935484  0.03
2000    1   False   True    saint louis 22.7246627565982  0.025
2000    1   False   False   saint louis 20.0136559139785  0.012
2000    2   True    False   saint louis 22.1646408045977  0.013
2000    2   False   True    saint louis 23.557868338558   0.07
2000    2   False   False   saint louis 20.8678927203065  0.012 
2000    3   True    False   saint louis 22.9311155913978  0.031
2000    3   False   True    saint louis 24.9204398826979  0.016
2000    3   False   False   saint louis 21.011541218638   0.0121
2000    4   True    False   saint louis 22.5921805555556  0.019
2000    4   False   True    saint louis 24.3710303030303  0.054
2000    4   False   False   saint louis 20.8877777777778  0.043 
2000    5   True    False   saint louis 21.4352016129032  0.032
2000    5   False   True    saint louis 22.8382404692082  0.023

我想获得一个新的 df ,其中包含年份和地区作为列,其中计算出特定月份(第 6 个月、第 7 个月和第 8 个月)的温度和降水平均值:

year  region            temp      precipitation
                                       
2000  saint louis     22.123      321.23
2000  diff region     24.643      673.12
2001  saint louis     21.433      134.27

我尝试了以下代码:

a = weather.groupby(["region","year"]).mean("month")

但这给出了所有 12 个月的平均值:

region year month temp   prep
dakar 2000  6.5   24.788 0.028
      2001  6.5   23.533 0.032 

标签: pythonpandas

解决方案


那么您所缺少的是您的数据子集,其中仅包含您需要的月份。因此,您可以创建一个包含要包含的月份的新数据框,然后使用groupby.agg

months = ['6','7','8']
temp = df[df['month'].isin(months)]
res = (df.groupby(['region','year']).agg({'temp':'mean','precipitation':'mean'})).reset_index()

会给你:

        region  year       temp  precipitation
0  saint louis  2000  22.259055       0.028007
1  saint louis  2001  22.838240       0.023000

仅供参考,我在样本中添加了一些额外的数据,因为在您发布的数据中,您只有 1 年和 1 个地区。


推荐阅读