Я не смог найти никакой документации о группировании по чередующимся частотам, поэтому лучшее решение, которое я мог бы придумать, - разбить ваш исходный кадр данных на 1-минутные секции, затем выполнить итерацию по ним, чередуя сложение 9-минутных данных и 1 минута данных.
Я признаю, что это немного глупо, и что итерации по фреймам данных не идеальны.
import pandas as pd
df = pd.DataFrame([['2020-01-01 00:00:03', 5], ['2020-01-01 00:03:03', 10],
['2020-01-01 00:08:03', 10], ['2020-01-01 00:09:03', 10], ['2020-01-01 00:10:03', 5],
['2020-01-01 00:13:03', 10], ['2020-01-01 00:18:03', 10], ['2020-01-01 00:19:03', 10]],
columns= ['timestamp', 'price'])
# to use pd.Grouper, you need to have your index set to a datetime format
df['timestamp'] = pd.to_datetime(df['timestamp'],infer_datetime_format=True)
df.set_index('timestamp', inplace=True)
# split the dataframe into segments of 1 minute
df_minutes = df.groupby(pd.Grouper(freq="1Min", label='left')).sum()
# Create your final df that will be filled
final_df = pd.DataFrame(columns = ["price"])
final_df.index.name = "timestamp"
# the counter i will group your df into multiples of 10 by its length
for i in range(int(len(df_minutes) / 10)):
# sum together the first 9 minutes
start = 10*i
end = start + 9
final_df = pd.concat([final_df, df_minutes[start:end].groupby(pd.Grouper(freq="10Min", label='left')).sum()])
# then the next 1 minute
start = 10*i + 9
end = start + 1
final_df = pd.concat([final_df, df_minutes[start:end].groupby(pd.Grouper(freq="1Min", label='left')).sum()])
Выход:
>>> final_df
price
timestamp
2020-01-01 00:00:00 25
2020-01-01 00:09:00 10
2020-01-01 00:10:00 25
2020-01-01 00:19:00 10