我有基于 15 分钟间隔的几个月时间序列天气数据。 以下一天的小样本:
Date/Time avg_temp avg_humid
0 2021-06-30 23:45:00 17.94 99.9
1 2021-06-30 23:30:00 17.94 99.9
2 2021-06-30 23:15:00 18.06 99.5
3 2021-06-30 23:00:00 18.11 98.7
4 2021-06-30 22:45:00 18.09 98.2
使用熊猫数据框,我想将数据转换为每日频率,并且只保留当天的最大“avg_temp”值和相应的“avg_humb”
所以对于上面的示例,我想获得新的数据框
Date max_avg_temp max_avg_humid
2021-06-30 18.11 98.7
试过了
df.index = pd.to_datetime(df['Date/Time'],format="%Y/%m/%d %H:%M:%S")
df.resample("d")['avg_temp'].max()
导致:
2021-06-30 18.11
但不是相应的湿度。
总之,两个问题:
如何实现上述重采样?
对于日期/时间格式,例如“2021-06-30 23:45:00”作为索引,您如何对pandas中的索引进行排序,以便在排序中对日期和时间进行升序和分解?
答案 0 :(得分:1)
使用 DataFrameGroupBy.idxmax
作为最大值的索引,因此可能通过 DataFrame.loc
选择匹配的行,最后删除时间为 Series.dt.normalize
或 Series.dt.date
:
df['Date/Time'] = pd.to_datetime(df['Date/Time'])
df1 = df.loc[df.resample("d", on='Date/Time')['avg_temp'].idxmax()]
#datetimes - times are set to 00:00:00
df1['Date/Time'] = df1['Date/Time'].dt.normalize()
#dates
#df1['Date/Time'] = df1['Date/Time'].dt.date
Date/Time avg_temp avg_humid
3 2021-06-30 18.11 98.7
或者:
df['Date/Time'] = pd.to_datetime(df['Date/Time'])
df = df.set_index('Date/Time')
df1 = df.loc[df.resample("d")['avg_temp'].idxmax()]
df1.index = df1.index.normalize()
print (df1)
avg_temp avg_humid
Date/Time
2021-06-30 18.11 98.7