如何按日期列的月和日部分分组,以便一年获得365个分组

时间:2019-03-29 21:22:07

标签: pandas

我有2004-2015年的温度数据。这是我的数据框的head():

            ID       Date Element  Data_Value
0  USC00084412  3/22/2014    TMIN         200
1  USC00087760  5/19/2010    TMIN         217
2  USC00087020  12/6/2005    TMAX         272
3  USW00012888   9/7/2009    TMIN         228
4  USR0000FCAC  6/28/2010    TMIN         250

我需要按“日期”列的月和日部分进行分组,因此我可以获得每个组的最大“数据值”。这将是365个小组。请帮忙。

1 个答案:

答案 0 :(得分:1)

有多种解决方案,具体取决于需要:

#first convert colum to datetimes
df['Date'] = pd.to_datetime(df['Date'])

针对新列MonthDay的解决方案,其最大值为Data_Value,汇总为GroupBy.max

df1 = df.groupby([df['Date'].dt.month.rename('Month'), 
                  df['Date'].dt.day.rename('Day')])['Data_Value'].max().reset_index()

print (df1)
   Month  Day  Data_Value
0      3   22         200
1      5   19         217
2      6   28         250
3      9    7         228
4     12    6         272

或以天为单位的月份:

df2 = df.groupby(df['Date'].dt.strftime('%m-%d'))['Data_Value'].max().reset_index()
print (df2)
    Date  Data_Value
0  03-22         200
1  05-19         217
2  06-28         250
3  09-07         228
4  12-06         272

或者如果需要最多Data_Value列的所有行以及DataFrameGroupBy.idxmax

df3 = df.loc[df.groupby(df['Date'].dt.strftime('%m-%d'))['Data_Value'].idxmax()]
print (df3)
            ID       Date Element  Data_Value
0  USC00084412 2014-03-22    TMIN         200
1  USC00087760 2010-05-19    TMIN         217
4  USR0000FCAC 2010-06-28    TMIN         250
3  USW00012888 2009-09-07    TMIN         228
2  USC00087020 2005-12-06    TMAX         272