根据最大值从 15 分钟到每天重新采样熊猫数据帧

时间:2021-07-14 10:22:23

标签: python pandas dataframe

我有基于 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

但不是相应的湿度。

总之,两个问题:

  1. 如何实现上述重采样?

  2. 对于日期/时间格式,例如“2021-06-30 23:45:00”作为索引,您如何对pandas中的索引进行排序,以便在排序中对日期和时间进行升序和分解?

1 个答案:

答案 0 :(得分:1)

使用 DataFrameGroupBy.idxmax 作为最大值的索引,因此可能通过 DataFrame.loc 选择匹配的行,最后删除时间为 Series.dt.normalizeSeries.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