У меня есть датафрейм pandas, который содержит список событий.Каждое событие имеет метку времени.Они отсортированы по времени.
id time
68851 2017-11-06 17:07:09
34067 2017-11-06 17:51:53
99838 2017-11-06 18:38:58
81212 2017-11-06 18:47:47
34429 2017-11-06 19:01:52
Я хотел бы расширить каждую строку, включив в нее количество событий, произошедших за последний час и день.Итак, приведенная выше таблица будет иметь вид (eil = "events in last"):
id time eil_hour eli_day
68851 2017-11-06 17:07:09 1 1
34067 2017-11-06 17:51:53 2 2
99838 2017-11-06 18:38:58 2 3
81212 2017-11-06 18:47:47 3 4
34429 2017-11-06 19:01:52 3 5
Вот моя попытка сделать это в Pandas, если первая таблица хранится в df
:
def eventsInLast(date):
ddict = {"eil_hour": 0, "eil_minute": 0}
#loop over timedeltas
for c, delta in [("eil_hour",timedelta(hours=1)),("eil_minute",timedelta(minutes=1))]:
#find number of rows with dates between current row - delta and delta
n = ((df["time"] >= (date-delta)) & (df["time"] <= date)).sum()
ddict[c] = n
if n==0:
break #break if no events in last hour, since there won't be any in last minute either
return pd.Series(ddict)
pd.concat([df,df["time"].apply(eventsInLast)],axis=1)
Проблема в том, что это невероятно медленно, и я работаю с большим набором данных.Кто-нибудь может предложить более эффективный способ сделать то же самое?