【问题标题】:I need to groupby only by the month and day part of 'Date' and get the maximum and minimum of each group我只需要按“日期”的月份和日期部分进行分组,并获得每个组的最大值和最小值
【发布时间】:2019-03-29 09:24:36
【问题描述】:

我有一个大数据框。我有 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

我怎样才能实现它?请帮忙。提前致谢

【问题讨论】:

    标签: python pandas


    【解决方案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
    

    【讨论】:

    • strftime 似乎更适合 OP 所需的输出。我投票给你:)
    【解决方案2】:

    使用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
    

    【讨论】:

    • 真的是 1 秒 :-)!!
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2016-06-15
    相关资源
    最近更新 更多