Подсчет дат в Пандах - PullRequest
       1

Подсчет дат в Пандах

0 голосов
/ 23 октября 2018

У меня есть датафрейм 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)

Проблема в том, что это невероятно медленно, и я работаю с большим набором данных.Кто-нибудь может предложить более эффективный способ сделать то же самое?

1 Ответ

0 голосов
/ 23 октября 2018

Попробуйте это

df['eil_hour'] = df.rolling('1h', on='time')['event'].sum() # sum or count??
df['eil_day'] = df.rolling('1d', on='time')['event'].sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...