повторная выборка панд для ночного времени - PullRequest
1 голос
/ 22 мая 2019

У меня есть многомерный массив временных рядов.Временные ряды в настоящее время агрегированы с 10-секундными интервалами:

**Time**
2016-01-11 17:00:00
2016-01-11 17:00:10
2016-01-11 17:00:20

Я хочу выполнить повторную выборку, чтобы получить 5-часовой таймфрейм в день (неважно, как время отображается во фрейме данных, простоимеет значение, что его агрегируется должным образом).Я делаю повторную выборку по средним значениям.

**Time**
2016-01-11 10:00:00-15:00:00
2016-01-12 10:00:00-15:00:00
2016-01-13 10:00:00-15:00:00

Как можно это сделать?

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Сначала я бы отфильтровал желаемый период времени и день групповой работы:

# mask the hours we want
hours = df.index.hour
mask = (hours >= 10) & (hours <=14)

# groupby
df[mask].groupby(df[mask].index.floor('D')).mean()

Данные игрушек:

Times = pd.date_range('2016-01-11', '2016-01-14', freq='10s')

np.random.seed(1)
df = pd.DataFrame({'Time': Times,
                   'Value': np.random.randint(1,10, len(Times))})

дает:

            Value
Time    
2016-01-11  4.993333
2016-01-12  5.030556
2016-01-13  5.012778
0 голосов
/ 23 мая 2019
df.groupby([df['Time'].dt.month, df['Time'].dt.day]).apply(lambda x: x.set_index('Time').resample('5H').mean())

Сначала вам нужно сгруппировать по месяцу и дню вашего столбца времени, а затем применить повторную выборку к столбцу времени за 5 часов (5 часов), а затем .mean(), который будет принимать среднее значение для других ваших столбцов.

Причиной для группового режима является то, что вам не нужны 5-часовые интервалы для всего дня каждый день, только для времени каждого дня. Если ваше время не превышает 5 часов, вы будете получать только один интервал в день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...