У меня есть такой набор данных:
user time city cookie index
A 2019-01-01 11.00 NYC 123456 1
A 2019-01-01 11.12 CA 234567 2
A 2019-01-01 11.18 TX 234567 3
B 2019-01-02 12.19 WA 456789 4
B 2019-01-02 12.21 FL 456789 5
B 2019-01-02 12.31 VT 987654 6
B 2019-01-02 12.50 DC 157890 7
A 2019-01-03 09:12 CA 123456 8
A 2019-01-03 09:27 NYC 345678 9
A 2019-01-03 09:34 TX 123456 10
A 2019-01-04 09:40 CA 234567 11
В этом наборе данных я хочу сравнить и выбрать два или более последовательных , которые соответствуют следующим критериям:
- Пользователь должен быть таким же
- Разница во времени должна быть менее 15 минут
- Повар ie должен отличаться
Так что, если я применю Фильтр I должен получить следующие данные:
user time city cookie index
A 2019-01-01 11.00 NYC 123456 1
A 2019-01-01 11.12 CA 234567 2
B 2019-01-02 12.21 FL 456789 5
B 2019-01-02 12.31 VT 987654 6
A 2019-01-03 09:12 CA 123456 8
A 2019-01-03 09:27 NYC 345678 9
A 2019-01-03 09:34 TX 123456 10
Итак, в приведенном выше сравнении первые две строки (индексы 1 и 2) удовлетворяют всем вышеуказанным условиям. Следующие два (индексы 2 и 3) имеют одинаковую готовку ie, индексы 3 и 4 имеют разных пользователей, 5 и 6 выбираются и отображаются, 6 и 7 имеют разницу во времени более 15 минут. 8,9 и 10 соответствуют критериям, а 11 - нет, так как дата с интервалом в 24 часа.
Как я могу решить эту проблему, используя python dataframe? Вся помощь приветствуется.
Что я пробовал:
Я пытался создать флаги с помощью
shift ()
cookiediff=pd.DataFrame(df.Cookie==df.Cookie.shift())
cookiediff.columns=['Cookiediffs']
timediff=pd.DataFrame(pd.to_datetime(df.time) - pd.to_datetime(df.time.shift()))
timediff.columns=['timediff']
mask = df.user != df.user.shift(1)
timediff.timediff[mask] = np.nan
cookiediff['Cookiediffs'][mask] = np.nan