Pandas - это не Python.
Когда вы используете обычный Python, у вас есть простой и приятный процедурный язык, и вы перебираете значения в контейнерах. Когда вы используете Pandas, вы должны стараться избегать явных Python l oop на уровне Python. Обоснование состоит в том, что Pandas (и numpy для базовых контейнеров) использует C оптимизированный код. Таким образом, вы получаете большой выигрыш при использовании инструментов pandas и numpy (это называется векторизация ).
Здесь то, что вы хотите, уже существует в Pandas и называется resample
.
В вашем примере, и если индекс является истинным DatetimeIndex (*), вы просто делаете:
df2 = df.resample('1H').mean()
Это дает:
Values
2019-08-27 02:00:00 91.443333
2019-08-27 03:00:00 91.427500
(*) Если нет, сначала преобразуйте его с помощью: df.index = pd.to_datetime(df.index)
Из вашего редактирования я думаю, что вы хотите получить одно значение из каждого периода. Один из возможных способов - взять наиболее частый в интервале H-15T, H + 30T.
. Затем вы можете использовать:
pd.DataFrame(df.resample('60T', base=45, loffset=pd.Timedelta(minutes=15)).agg(
lambda x: x['Values'].value_counts().index[0]).rename('Values'))
Этот дает:
* 1027. *