Resample данных временного ряда несколько переменных - PullRequest
0 голосов
/ 03 марта 2020

У меня есть данные временных рядов (составляющих) одна переменная 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)

Вопрос , Как мне пересчитать данные за день в отдельном pandas df с именем daily_summary с 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, где al oop мог бы просто фильтровать каждый день. .. Как-то так ???

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'>

Любые советы очень ценятся

1 Ответ

0 голосов
/ 03 марта 2020

Можно разрешить до 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
...