重新取样时间序列数据的多个变量[英] Resample time series data multiple variables

本文是小编为大家收集整理的关于重新取样时间序列数据的多个变量的处理方法,想解了重新取样时间序列数据的多个变量的问题怎么解决?重新取样时间序列数据的多个变量问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一些时间序列数据(编造一些)一个变量是 value 另一个是 Temperature

import numpy as np
import pandas as pd
np.random.seed(11)

rows,cols = 50000,2
data = np.random.rand(rows,cols) 
tidx = pd.date_range('2019-01-01', periods=rows, freq='T') 
df = pd.DataFrame(data, columns=['Temperature','Value'], index=tidx)

问题,我如何在名为 daily_summary 的单独的 pandas df 中每天重新采样数据,每列包含 3 列:

  1. 每日最大值
  2. 最大值出现的小时数
  3. 出现最大值时的记录温度

我知道我可以使用下面的代码来查找每日最大值和它发生的时间:

daily_summary = df.groupby(df.index.normalize())['Value'].agg(['idxmax', 'max']) 
daily_summary['hour'] = daily_summary['idxmax'].dt.hour
daily_summary = daily_summary.drop(['idxmax'], axis=1)
daily_summary.rename(columns = {'max':'DailyMaxValue'}, inplace = True)

但我在尝试将这些每日记录的最大值期间的温度纳入其中时迷失了方向......

使用 .loc 会是一种更好的方法,其中循环可以每天过滤...像这样的东西???

for idx, days in df.groupby(df.index.date):
    print(days)
    daily_summary = df.loc[days['Value'].max().astype('int')] 

如果我运行它,我可以每天打印 days 但 daily_summary 会抛出一个 TypeError: cannot do index indexing on <class 'pandas.core.indexes.datetimes.DatetimeIndex'> with these indexers [0] of <class 'numpy.int32'>

非常感谢任何提示

推荐答案

可以解析成idxmax和loc:

idx = df.groupby(df.index.normalize())['Value'].idxmax()
ret_df = df.loc[idx].copy()

# get the hour
ret_df['hour'] = ret_df.index.hour

# set date as index
ret_df.index = ret_df.index.normalize()

输出:

            Temperature     Value  hour
2019-01-01     0.423320  0.998377    19
2019-01-02     0.117154  0.999976    10
2019-01-03     0.712291  0.999497    16
2019-01-04     0.404229  0.999996    21
2019-01-05     0.457618  0.999371    17

本文地址:https://www.itbaoku.cn/post/1727793.html