我有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个小组。请帮忙。
答案 0 :(得分:1)
有多种解决方案,具体取决于需要:
#first convert colum to datetimes
df['Date'] = pd.to_datetime(df['Date'])
针对新列Month
和Day
的解决方案,其最大值为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