Сгруппируйте каждое значение в течение часа в одно значение - PullRequest
2 голосов
/ 11 июля 2019

Мне нужно среднее значение всех значений за этот час, и мне нужно сделать это для всех таких часов для каждого дня.

Например:

Date                    Col1
2016-01-01 07:00:00      1
2016-01-01 07:05:00      2
2016-01-01 07:17:00      3
2016-01-01 08:13:00      2
2016-01-01 08:55:00      10
.
.
.
.
.
.
.
.
2016-12-31 22:00:00      3
2016-12-31 22:05:00      3
2016-12-31 23:13:00      4
2016-12-31 23:33:00      5
2016-12-31 23:53:00      6

Итак, мне нужносгруппировать все значения в течение этого часа в течение этой даты в одно (это означает).

Ожидаемый результат:

Date                    Col1
2016-01-01 07:00:00      2           ##(2016-01-01 07:00:00, 07:05:00, 07:17:00) 3 values falls between the one hour range for that date i.e. 2016-01-01 07:00:00 - 2016-01-01 07:59:00, both inclusive.
2016-01-01 08:00:00      6
.
.
.
.
.
.
.
.
2016-12-31 22:00:00      3
2016-12-31 23:00:00      5

Итак, если я сделаю это для всегогод, в конце концов, общее количество строк будет 365 * 24.

Я пытался решить, используя этот ответ , но он не работает.Может кто-нибудь мне помочь?

Ответы [ 2 ]

1 голос
/ 11 июля 2019

resample от pandas должно соответствовать вашему случаю

import pandas as pd

df = pd.DataFrame({
    'Date':['2016-01-01 07:00:00','2016-01-01 07:05:00',
            '2016-01-01 07:17:00' ,'2016-01-01 08:13:00',
            '2016-01-01 08:55:00','2016-12-31 22:00:00',
            '2016-12-31 22:05:00','2016-12-31 23:13:00',
            '2016-12-31 23:33:00','2016-12-31 23:53:00'],
    'Col1':[1, 2, 3, 2, 10, 3, 3, 4, 5, 6]
})

df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d') # Convert series to datetime type

df.set_index('Date', inplace=True) # Set Date column as index


# for every hour, take the mean for the remaining columns of the dataframe 
# (in this case only for Col1, fill the NaN with 0 and reset the index)
df.resample('H').mean().fillna(0).reset_index()

df.head()
    Date    Col1
0   2016-01-01 07:00:00 2.0
1   2016-01-01 08:00:00 6.0
2   2016-01-01 09:00:00 0.0
3   2016-01-01 10:00:00 0.0
4   2016-01-01 11:00:00 0.0
1 голос
/ 11 июля 2019

Попробуйте groupby, dt.hour, mean, reset_index и assign:

print(df.groupby(df['Date'].dt.hour)['Col1'].mean().reset_index().assign(Date=df['Date']))

Вывод для первых двух строк:

                 Date  Col1
0 2016-01-01 07:00:00     2
1 2016-01-01 07:05:00     6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...