Я добился этого с помощью resample
, но это также требует немного возни, поэтому это может быть не лучшим решением.Прежде всего нам нужно, чтобы индекс имел тип DatetimeIndex, TimedeltaIndex или PeriodIndex.
# set Time to be index
df.set_index('Time', inplace=True)
# change index type to datetime
df.index = pd.to_datetime(df.index)
с использованием resample
- я использовал правило 60 минут.Вы можете ознакомиться с правилами в следующей ссылке resample
new_df = df.resample('60T').mean().reset_index()
, теперь у нас есть new_df
со средними значениями каждые 60 минут.нам просто нужно сделать следующее, чтобы получить его в нужном формате.
from datetime import timedelta
new_df['EndTime'] = new_df['Time'] + timedelta(seconds=3600)
и, наконец, переименовать столбцы:
new_df.rename(columns={'Time': 'StartTime', 'Value': 'AvgValue'}, inplace=True)
Вывод:
StartTime AvgValue EndTime
0 2018-01-03 12:00:00 10.0 2018-01-03 13:00:00
1 2018-01-03 13:00:00 30.0 2018-01-03 14:00:00
2 2018-01-03 14:00:00 45.0 2018-01-03 15:00:00
РЕДАКТИРОВАТЬ: На этот раз с использованием первого кадра данных (df1) для диапазонов времени вы можете сделать следующее
df1['AvgTime'] = df1.T.apply(lambda x: df.loc[x['StartTime']:x['EndTime']].mean()).T