我只需要按“日期”的月份和日期进行分组,并获得每个组的最大值和最小值

时间:2019-03-29 01:17:33

标签: python pandas

我有一个很大的数据框。我有2005年到2014年的数据。这是我的数据框的head():

             ID       Date Element  Data_Value
2   USC00087020 2005-12-06    TMAX         272
5   USC00084095 2006-07-25    TMAX         328
6   USC00084095 2011-07-26    TMAX         333
7   USC00088841 2008-10-26    TMAX         294
12  USC00085667 2015-10-07    TMAX         300
14  USC00087760 2013-04-02    TMAX         322
15  USR0000FCHE 2010-05-26    TMAX         311
16  USC00088841 2007-12-27    TMAX         256

我需要根据年份和月份进行分组。我使用了以下代码:

df.groupby(pd.Grouper(key='Date',freq='M')).agg({'Data_Value':np.max})

并得到如下结果:

            Data_Value
Date                  
2005-01-31         294
2005-02-28         300
2005-03-31         344
2005-04-30         322
2005-05-31         367
2005-06-30         383
2005-07-31         372
2005-08-31         361

但是我需要以下格式。这样我就可以得出这些年来每个月的最大值和最小值:

Date    Data_Value
Jan     217
Feb     240
Mar     228
Apr     190
May     250

如何实现?请帮忙。预先感谢

2 个答案:

答案 0 :(得分:1)

您可以先使用to_datetime将“日期”列转换回日期格式,然后使用该列的groupby仅选择月份

df.Date=pd.to_datetime(df.Date)

df.groupby(df.Date.dt.strftime('%B')).Data_Value.max()
Out[290]: 
Date
April       322
December    272
July        333
May         311
October     300
Name: Data_Value, dtype: int64

答案 1 :(得分:1)

使用pandas.to_datetime

import pandas as pd

df['Date'] = pd.to_datetime(df['Date'])
df.groupby(df['Date'].dt.month)['Data_Value'].max()

Date
4     322
5     311
7     333
10    300
12    272