我正在尝试绘制一个图表,显示2005-2014年期间的每日最高和最低温度。温度在“ Data_Value”列中表示。

我很难弄清楚如何进行此处。我需要以月而不是年或天来显示x轴。

数据集

                     ID Element  Data_Value
Date
2005-01-01  USW00004848    TMIN           0
2005-01-01  USC00207320    TMAX         150
2005-01-01  USC00207320    TMIN         -11
2005-01-01  USW00014833    TMIN         -44
2005-01-01  USW00014833    TMAX          33
.....
2015-12-31  USC00200032    TMAX          11
2015-12-31  USC00205050    TMIN         -17
2015-12-31  USC00208202    TMAX           0
2015-12-31  USC00201250    TMIN          -6
2015-12-31  USC00200230    TMIN         -17


我的尝试:


分别从数据集中提取TMAX和TMIN


dfMax = df2[df2["Element"] == "TMAX"]
dfMin = df2[df2["Element"] == "TMIN"]



查找每日的最大和最小


dfMinD = dfMin.Data_Value.resample("d").min()
dfMaxD = dfMax.Data_Value.resample("d").max()


我被困在这里。该图在x轴上显示年,而不是月份。

我认为我需要按月查找最高和最低温度?如何将它们按月分组,以显示2005-2014年期间每个月(1月-12月)的每日最大值和最小值?

最佳答案

第一个解决方案是在几个月的开始将d更改为MS

dfMax = df2[df2["Element"] == "TMAX"]
dfMin = df2[df2["Element"] == "TMIN"]

dfMinD = dfMin.Data_Value.resample("MS").min()
dfMaxD = dfMax.Data_Value.resample("MS").max()

df = pd.concat([dfMaxD, dfMinD], axis=1, keys=('max','min'))


几个月内使用DatetimeIndex.to_period的另一个解决方案传递给DataFrame.groupby并汇总minmax

dfMax = df2[df2["Element"] == "TMAX"]
dfMin = df2[df2["Element"] == "TMIN"]

dfMaxD = dfMax.groupby(dfMax.index.to_period('m'))['Data_Value'].max()
dfMinD = dfMin.groupby(dfMin.index.to_period('m'))['Data_Value'].min()

print (dfMinD)
Date
2005-01   -44
2015-12   -17
Freq: M, Name: Data_Value, dtype: int64

print (dfMaxD)
Date
2005-01    150
2015-12     11
Freq: M, Name: Data_Value, dtype: int64

df = pd.concat([dfMaxD, dfMinD], axis=1, keys=('max','min'))
print (df)
         max  min
Date
2005-01  150  -44
2015-12   11  -17


或者,如果需要同时创建两个月的PeriodIndex的一个解决方案,然后按Series.unstack进行重塑,然后按一级汇总minmax进行分组:

df = (df2.set_index(df2.index.to_period('m'))
         .set_index(['ID','Element'], append=True)['Data_Value']
         .unstack()
         .groupby(level=0)
         .agg({'TMAX':'max', 'TMIN':'min'}))
print (df)
          TMAX  TMIN
Date
2005-01  150.0 -44.0
2015-12   11.0 -17.0

关于python - Groupby多年来每月的最大值和最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58339660/

10-10 21:52