Как извлечь метку среднего времени за минуту python? - PullRequest
1 голос
/ 25 апреля 2020

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

Например: когда Восход солнца в 8.42 утра, мне нужна средняя отметка времени между 8.42 утра и 9:00, затем снова средняя отметка времени между 9:00 и 10:00 и т. Д.

Я сгенерировал временной ряд, используя pvlib, когда солнце находится над горизонтом, и вот временной ряд 1 января 2019 года для первый час Временной ряд сохраняется в кадре данных.

Временной ряд:

2019-01-01 08: 42: 00 + 01: 00

2019-01-01 08: 43: 00 + 01: 00

2019-01-01 08: 44: 00 + 01: 00

2019-01-01 08: 45: 00 + 01: 00

2019-01-01 08: 46: 00 + 01: 00

2019-01-01 08: 47: 00 + 01: 00

2019-01-01 08: 48: 00 + 01: 00

2019-01-01 08: 49: 00 + 01: 00

2019-01-01 08: 50: 00 + 01: 00

2019-01-01 08: 51: 00 + 01: 00

2019-01-01 08: 52: 00 + 01: 00

2019-01-01 08: 53: 00 + 01: 00

2019-01-01 08: 54: 00 + 01: 00

2019-01-01 08: 55: 00 + 01: 00

2019-01-01 08: 56: 00 + 01: 00

2019-01-01 08: 57: 00 + 01: 00

2019-01-01 08: 58: 00 + 01: 00

2019-01-01 08: 59: 00 + 01: 00

2019-01-01 09: 00: 00 + 01: 00

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

2019-01-01 08: 50: 00 + 01: 00

2019-01-01 08: 51: 00 + 01: 00

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Очень интересные вопросы, с которыми я также сталкивался несколько раз при работе с временными рядами солнечного излучения. Во-первых, всегда проще, если вы предоставите небольшой пример, например:

import pandas as pd
import numpy as np
date_range = pd.date_range('2019-01-01 08:42',periods=200, freq='1min')
df = pd.DataFrame(index=date_range, data={'data':np.arange(len(date_range))})

Одним из решений является определение столбца с минутой каждого временного шага, затем выполнить среднюю повторную выборку и добавить среднюю минуту в качестве временной шкалы для индекса:

df['minute'] = df.index.minute
dfr = df.resample('1h').mean()
dfr['middle_time'] = dfr.index + pd.to_timedelta(dfr['minute']+0.5, unit='min')
print(dfr.head())

Это приводит к:

                     data    minute     middle_time
2019-01-01 08:00:00    8.5    50.5      2019-01-01 08:51:00
2019-01-01 09:00:00   47.5    29.5      2019-01-01 09:30:00
2019-01-01 10:00:00  107.5    29.5      2019-01-01 10:30:00
2019-01-01 11:00:00  167.5    29.5      2019-01-01 11:30:00
2019-01-01 12:00:00  198.5     0.5      2019-01-01 12:01:00

Конечно, вы также можете добавить минутное смещение к самому индексу, в зависимости от того, передаете ли вы индекс или столбец даты и времени для PVLib.

0 голосов
/ 25 апреля 2020

Вы можете попробовать что-то вроде этого:

df['Time'] = pd.to_datetime(df['Time'])
df['Time'] = df['Time'].sort_values()
print(df.loc[int(len(df['Time'])/2)]['Time'])

2019-01-01 08:51:00+01:00
...