Python Pandas: агрегируйте данные по часам и отображайте их вместо индекса - PullRequest
0 голосов
/ 31 мая 2018

Я хотел бы агрегировать некоторые данные по часам, используя pandas, и отображать дату вместо индекса.

Код, который у меня есть сейчас, следующий:

import pandas as pd
import numpy as np

dates = pd.date_range('1/1/2011', periods=20, freq='25min')
data = pd.Series(np.random.randint(100, size=20), index=dates)

result = data.groupby(data.index.hour).sum().reset_index(name='Sum')

print(result)

Который отображаетчто-то вроде:

   index  Sum
0      0  131
1      1  116
2      2  180
3      3   62
4      4   95
5      5  107
6      6   89
7      7  169

Проблема в том, что вместо индекса я хочу отобразить дату, связанную с этим часом.

Результат, которого я пытаюсь достичь, заключается в следующем:

       index                Sum
0      2011-01-01 01:00:00  131
1      2011-01-01 02:00:00  116
2      2011-01-01 03:00:00  180
3      2011-01-01 04:00:00   62
4      2011-01-01 05:00:00   95
5      2011-01-01 06:00:00  107
6      2011-01-01 07:00:00   89
7      2011-01-01 08:00:00  169

Есть ли способ, которым я могу легко сделать это с помощью панд?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018
data.groupby(data.index.strftime('%Y-%m-%d %H:00:00')).sum().reset_index(name='Sum')
0 голосов
/ 31 мая 2018

Вы можете использовать resample.

data.resample('H').sum()

Выход:

2011-01-01 00:00:00     84
2011-01-01 01:00:00    121
2011-01-01 02:00:00    160
2011-01-01 03:00:00     70
2011-01-01 04:00:00     88
2011-01-01 05:00:00    131
2011-01-01 06:00:00     56
2011-01-01 07:00:00    109
Freq: H, dtype: int32

Опция # 2

data.groupby(data.index.floor('H')).sum()

Выход:

2011-01-01 00:00:00     84
2011-01-01 01:00:00    121
2011-01-01 02:00:00    160
2011-01-01 03:00:00     70
2011-01-01 04:00:00     88
2011-01-01 05:00:00    131
2011-01-01 06:00:00     56
2011-01-01 07:00:00    109
dtype: int32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...