Как сократить набор данных времени до нового набора данных с усреднением за 6 часов в pandas, python? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь сделать 6-часовое среднее значение кадра данных в python. См. Пример ниже.

                  time  temperature
0  2020-01-01 04:30:00            2
1  2020-01-01 05:50:00            3
2  2020-01-01 09:30:00            4
3  2020-01-01 11:50:00            6
4  2020-01-01 13:30:00            3
5  2020-01-01 13:55:00            4
6  2020-01-01 20:30:00            1
7  2020-01-01 22:55:00            4
8  2020-01-02 02:30:00            7
9  2020-01-02 02:40:00            8
10 2020-01-02 10:30:00            3
11 2020-01-02 10:40:00            5
12 2020-01-02 14:30:00            2
13 2020-01-02 15:40:00            6
14 2020-01-02 23:30:00            5
15 2020-01-02 23:47:00            1

Из этого примера в идеале я хотел бы получить следующий новый фрейм данных:

                  time  temperature
0  2020-01-01 06:00:00          2.5
1  2020-01-01 12:00:00            5
2  2020-01-01 18:30:00          3.5
3  2020-01-01 00:00:00          2.5
4  2020-01-02 06:00:00          7.5
5  2020-01-02 12:00:00            4
6  2020-01-02 18:00:00            4
7  2020-01-02 00:00:00            3

Итак, когда время показывает 2020-01-02 18:00:00, это означает 2 января 2020 года с 12ч до 18ч. Код для примера фрейма данных:

import pandas as pd
from datetime import datetime

flights = {
        'time': [datetime.strptime('1/1/2020 4:30 AM', '%d/%m/%Y %I:%M %p'),datetime.strptime('1/1/2020 5:50 AM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('1/1/2020 9:30 AM', '%d/%m/%Y %I:%M %p'),datetime.strptime('1/1/2020 11:50 AM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('1/1/2020 1:30 PM', '%d/%m/%Y %I:%M %p'),datetime.strptime('1/1/2020 1:55 PM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('1/1/2020 8:30 PM', '%d/%m/%Y %I:%M %p'),datetime.strptime('1/1/2020 10:55 PM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('2/1/2020 2:30 AM', '%d/%m/%Y %I:%M %p'),datetime.strptime('2/1/2020 2:40 AM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('2/1/2020 10:30 AM', '%d/%m/%Y %I:%M %p'),datetime.strptime('2/1/2020 10:40 AM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('2/1/2020 2:30 PM', '%d/%m/%Y %I:%M %p'),datetime.strptime('2/1/2020 3:40 PM', '%d/%m/%Y %I:%M %p'),
                 datetime.strptime('2/1/2020 11:30 PM', '%d/%m/%Y %I:%M %p'),datetime.strptime('2/1/2020 11:47 PM', '%d/%m/%Y %I:%M %p')],
        'temperature': [2,3,4,6,3,4,1,4,7,8,3,5,2,6,5,1]}

df = pd.DataFrame(flights, columns = ['time','temperature'])

Любая помощь приветствуется

1 Ответ

1 голос
/ 16 июня 2020

Используйте DataFrame.resample с 6H и mean:

#if necessary
df['time'] = pd.to_datetime(df['time'])

df = df.resample('6H', on='time').mean().reset_index()
print (df)
                 time  temperature
0 2020-01-01 00:00:00          2.5
1 2020-01-01 06:00:00          5.0
2 2020-01-01 12:00:00          3.5
3 2020-01-01 18:00:00          2.5
4 2020-01-02 00:00:00          7.5
5 2020-01-02 06:00:00          4.0
6 2020-01-02 12:00:00          4.0
7 2020-01-02 18:00:00          3.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...