У меня есть требование, при котором мне нужно найти все уникальные значения merchant_store_id пользователя на одной и той же карте штампов за определенный период времени.У меня была группа по идентификатору штемпельной карты и идентификатору пользователя, чтобы получить фрейм данных на основе условия.Теперь мне нужно найти уникальный merchant_store_id этого фрейма данных в интервале 10 минут от этой записи.
Мой подход заключается в том, что я зациклился бы в этом фрейме данных groupby, а затем я бы нашел все индексы в этом фрейме данных этой группы.а затем я бы создал новый фрейм данных от времени индекса до индекса + 60 минут, а затем нашел в нем уникальные значения merchant_store_id.Если уникальный идентификатор merchant_store_id равен> 1, я бы добавил этот фрейм данных с того времени в окончательный фрейм данных.Проблема с подходом в том, что он отлично работает для небольших данных, но для данных размером 20 000 строк показывает ошибку памяти в Linux и продолжает работать в Windows.Ниже приведен мой код
fi_df = pd.DataFrame()
for i in df.groupby(["stamp_card_id", "merchant_id", "user_id"]):
user_df = i[1]
if len(user_df)>1:
# get list of unique indexes in that groupby df
index = user_df.index.values
for ind in index:
fdf = user_df[ind:ind+np.timedelta64(1, 'h')]
if len(fdf.merchant_store_id.unique())>1:
fi_df=fi_df.append(fdf)
fi_df.drop_duplicates(keep="first").to_csv(csv_export_path)
Пример данных после группировки по:
((117, 209, 'oZOfOgAgnO'), stamp_card_id stamp_time stamps_record_id user_id \
0 117 2018-10-14 16:48:03 1756 oZOfOgAgnO
1 117 2018-10-14 16:54:03 1759 oZOfOgAgnO
2 117 2018-10-14 16:58:03 1760 oZOfOgAgnO
3 117 2018-10-14 17:48:03 1763 oZOfOgAgnO
4 117 2018-10-14 18:48:03 1765 oZOfOgAgnO
5 117 2018-10-14 19:48:03 1767 oZOfOgAgnO
6 117 2018-10-14 20:48:03 1769 oZOfOgAgnO
7 117 2018-10-14 21:48:03 1771 oZOfOgAgnO
8 117 2018-10-15 22:48:03 1773 oZOfOgAgnO
9 117 2018-10-15 23:08:03 1774 oZOfOgAgnO
10 117 2018-10-15 23:34:03 1777 oZOfOgAgnO
merchant_id merchant_store_id
0 209 662
1 209 662
2 209 662
3 209 662
4 209 662
5 209 662
6 209 663
7 209 664
8 209 662
9 209 664
10 209 663 )
Я также пробовал метод повторной выборки, но затем я получаю данные в соответствующее время, гдеусловие, когда пользователь нажимает несколько элементов merchant_store_id, игнорируется в конечное время часов.
Любая помощь будет оценена.Спасибо