группировка данных по времени пандас
не могу додуматься как сгруппировать данные по времени.Нужно что бы код сгруппировал колонки currency_pair и side по времени из колонки Time_ms те строки которые укладываются в промежуток <=200ms и сложил значения по колонке amount.Максимум что я смог это сгруппировать через grouper,но проблема в том что у него точка отсчета с начала таблицы, из за этого происходит смещение по времени и некоторые отметки времени не попадают в группировку хотя удовлетворяют условию что разница между ними <=200ms.
import pandas as pd
import time
import datetime
#не переносить столбцы в консоли
pd.options.display.expand_frame_repr = False
agg_trades=({'Currency_pair':['btc','eth','eth','axs','btc','btc','btc','btc'],
'Side':['sel','buy','buy','sel','buy','buy','buy','buy'],
'Amount':[30,24,2,56,40,50,3,8],
'Time_ms':[ 1684955778330.0,
1684960224095.0,
1684960224241.0,
1685020640819.0,
1685487516479.0,
1685487516487.0,
1685487516501.0,
1685487516952.0],
'Price':[134.3,123.5,145.5,300000.4,520,854,472,450]})
df=pd.DataFrame(agg_trades)
#функция приобразуящая уникс время в милискикундах в формат даты
def daytime (x):
x=datetime.datetime.fromtimestamp(x/1000.0)
return x
df['Time_ms']=df['Time_ms'].apply(daytime)
a=df.groupby(['Currency_pair','Side',pd.Grouper(key='Time_ms', freq='200ms')])['Amount']\
.sum().reset_index()
print (a)
результат должен быть такой
Currency_pair Side Time_ms Amount
0 axs sel 2023-05-25 13:17:20.800 56
1 btc buy 2023-05-30 22:58:36.400 93
2 btc buy 2023-05-30 22:58:36.800 8
3 btc sel 2023-05-24 19:16:18.200 30
4 eth buy 2023-05-24 20:30:24.000 26
время в миллисекундах после группировки в колонке time_ms не принципиально можно писать без них
Источник: Stack Overflow на русском