Панды найти дату частота

1

У меня есть набор данных:

    login                 id
0   2015-06-22 04:55:00   1
1   2015-06-23 05:55:00   1
2   2015-06-25 04:55:00   2
3   2015-06-26 02:55:00   2
4   2015-07-02 04:55:00   2
5   2015-07-12 04:55:00   3
6   2015-07-13 04:55:00   3
7   2015-07-15 04:55:00   5
8   2015-07-21 04:55:00   5
9   2015-07-22 04:55:00   5
10  2015-07-30 04:55:00   5
11  2015-08-30 04:55:00   5
12  2015-06-02 04:55:00   7
13  2015-07-02 04:55:00   7
14  2015-08-02 04:55:00   7

Я использую Панды в Python для анализа. Я хотел бы проверить, входил ли конкретный идентификатор как минимум 2 раза в течение 24 часов, и сохранить эти идентификаторы в списке с именем good_id.

Например: id = 1 не будет сохранен, потому что они вошли в систему дважды, но через 25 часов. id = 2 будет храниться, потому что они имеют.

и т.п.

  • 0
    Вопрос не ясен, id 2 залогинился на 6-25, затем 6-30, а затем 7-02. Как это дважды за 24 часа?
  • 0
    Извините, отредактировано, что 6-30 теперь 6-26, и это в течение 24 часов.
Теги:
pandas

3 ответа

0

Групповой и разный,

df['login'] = pd.to_datetime(df['login'])

df.loc[df.groupby('id')['login'].diff().astype('timedelta64[h]') <= 24, 'id'].unique().tolist()

Ты получаешь

[2, 3, 5]
  • 0
    Есть ли быстрый способ изменить это, чтобы мы могли изменить проверку частоты входа в систему? Скажем, хранить идентификаторы пользователей, которые вошли в систему 2 раза за 3 дня или около того.
  • 0
    df.loc [df.groupby ('id') ['login']. diff (). astype ('timedelta64 [h]') <= 24 * 3] вернет строки, если вход произошел меньше или равен до 72 часов. Это то, что вы хотите?
Показать ещё 1 комментарий
0

Здесь многошаговый подход:

df['last_log'] = df.groupby('id').login.shift().fillna(pd.to_datetime(0))
df['duration'] = df.login - df.last_log

# good ids
df.id[(df['duration'] <= pd.Timedelta(1, 'd'))].unique()

# output: array([2, 3, 5], dtype=int64)
  • 0
    Есть ли быстрый способ изменить это, чтобы мы могли изменить проверку частоты входа в систему? Скажем, хранить идентификаторы пользователей, которые вошли в систему 2 раза за 3 дня или около того.
  • 0
    замените 1, 'd' в pd.Timedelta(1,'d') на pd.Timedelta(1,'d') , 3,'d' , 12,'h' ...
Показать ещё 2 комментария
0

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

import numpy as np

df.sort_values(by=['id','login'],inplace=True)
df['diff'] = df['login'].diff() / np.timedelta64(1,'h')
  • 0
    Это будет смотреть на разницу первого входа пользователя user2 и последнего входа user1 и т. Д.
  • 0
    Групповой требуется в любом случае.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню