Как создать переменную сеанса на основе временной переменной в пандах - PullRequest
0 голосов
/ 08 ноября 2018

Допустим, у меня есть такой набор данных с меткой времени и идентификатором пользователя.

Я хочу создать переменную «сессии» таким образом, чтобы я мог указать время (1 мин или 2 мин) и для каждого идентификатора пользователя, если следующий раз в пределах идентификатора пользователя будет в течение этого времени (1 или 2 мин или итак) тогда оба записываются как один и тот же сеанс. В основном я смотрю в первый раз, а затем рассчитываю разницу в следующий раз, и если в течение 1 минуты, то же сеанс. Аналогично, если сеанс меняется, мы берем это новое время сеанса за базовое время и рассчитываем все последующие посещения с учетом этого нового времени сеанса.

Я хочу, чтобы этот таймфрейм был похож на переменную, с которой можно играть, а не жестко закодировать.

Я могу сделать это в SQL с помощью оконной функции. было интересно, как это сделать в пандах.

time company_id
    2018-10-23 00:01:23 113141P
    2018-10-23 00:01:29 113141P
    2018-10-23 00:07:37 113141P
    2018-10-23 00:22:23 113141P
    2018-10-23 00:23:10 113141P

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать transform с diff и cumsum:

# If not in datetime format already:
df['time'] = pd.to_datetime(df['time'])

# sort_values('time') is there just in case it's not already sorted
df['session'] = (df.sort_values('time').groupby('company_id')['time']
                 .transform(lambda x: (x.diff() > '00:02:00')
                            .cumsum()))

>>> df
                 time company_id  session
0 2018-10-23 00:01:23    113141P        0
1 2018-10-23 00:01:29    113141P        0
2 2018-10-23 00:07:37    113141P        1
3 2018-10-23 00:22:23    113141P        2
4 2018-10-23 00:23:10    113141P        2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...