Панды, преобразующие временные ряды за 15 минут данных

#python-3.x #pandas #time-series #python-datetime

#python-3.x #панды #временные ряды #python-datetime

Вопрос:

У меня есть данные временных рядов со значениями цен, получаемыми через каждые 15 минут временного блока. Я хочу преобразовать данные, в которых каждый временной блок становится столбцом, и мы получаем одну строку определенной даты. Например, фрейм данных, содержащий 2 столбца — [‘Дата-время’, ‘Цена’], приводит к фрейму данных из 1 96 столбцов — [‘Дата’] и 96 столбцов каждого временного блока.

Вот код, который я написал для преобразования часов в столбцы, в котором указано 24 столбца часов. Как мне преобразовать его за 15 минут в 96 столбцов-

 def transform_to_hour_cols(series):
    df = pd.DataFrame()

    start = series.index.min()
    end = series.index.max()
    
    df['year'] = series.index.year
    df['month'] = series.index.month
    df['day'] = series.index.day
    df['hours'] = series.index.hour
    df['loads'] = series.values
  
    
    df = df.set_index(['year', 'month', 'day', 'hours'], append=True).unstack()
    df = df.groupby(['year', 'month', 'day']).sum()
    
    df.reset_index(inplace=True)
    df.drop(['year', 'month', 'day'], axis=1, inplace=True)
    
    date_list = pd.date_range(start=start, end=end, freq='D').strftime('%Y-%m-%d')
    
    df.index = pd.DatetimeIndex(date_list, name='date')
    
    return df

price = transform_to_hour_cols(df['Price'])
price.head()
  

Вот пример фрейма данных-

введите описание изображения здесь

Комментарии:

1. Вы можете использовать Series.dt.minute , чтобы получить распределение по минутам. Поскольку ваши данные имеют только 15-минутное окно, оно автоматически настроит то же самое.

Ответ №1:

  1. Вы можете создать date time столбец and с dt.date помощью and dt.time .
  2. Затем отправьте time в столбцы. Чтобы сделать это, сначала вы должны поместить date и time в индекс с .set_index() помощью . Затем используйте .unstack(1) для перехода time к столбцам. Ввод 1 unstack() означает, что вы передаете второй столбец индекса в только что созданный вами мультииндекс. Если бы вы прошли 0 , то отправили date бы в столбцы.
  3. Наконец, очистите мультииндекс столбца с помощью .reset_index(level=0)

 df = pd.DataFrame({'date' : ['2020-04-01 00:00:00', '2020-04-01 00:15:00',
                             '2020-04-01 00:30:00', '2020-04-01 00:45:00', '2020-04-01 01:00:00'],
                   'mcp' : [2399.21, 2499.07, 2448.89, 2399.80, 2199.89]})
df['date'] = pd.to_datetime(df['date'])
df['time'] = df['date'].dt.time
df['date'] = df['date'].dt.date
df = df.set_index(['date', 'time']).unstack(1).reset_index(level=0)
df
Out[1]: 
           date      mcp                                    
time            00:00:00 00:15:00 00:30:00 00:45:00 01:00:00
0    2020-04-01  2399.21  2499.07  2448.89   2399.8  2199.89
  

С предоставленными вами примерами данных я предполагаю, что вы уже успешно сгруппировали 15-минутные интервалы по дате по строкам, так что это просто поможет вам распределить 15-минутные интервалы по столбцам.