У меня есть набор данных:
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 будет храниться, потому что они имеют.
и т.п.
Групповой и разный,
df['login'] = pd.to_datetime(df['login'])
df.loc[df.groupby('id')['login'].diff().astype('timedelta64[h]') <= 24, 'id'].unique().tolist()
Ты получаешь
[2, 3, 5]
Здесь многошаговый подход:
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)
1, 'd'
в pd.Timedelta(1,'d')
на pd.Timedelta(1,'d')
, 3,'d'
, 12,'h'
...
Убедитесь, что вы сортируете фрейм данных по индексу, а затем по логину.
import numpy as np
df.sort_values(by=['id','login'],inplace=True)
df['diff'] = df['login'].diff() / np.timedelta64(1,'h')