Python. Pandas Разделение пользовательских сессий на выборки
Есть датафрейм:
df = pd.read_csv('https://drive.google.com/uc?export=download&id=1n19a-zaFWkNj6wUcKWMzaOVMk752Z9dH')
в колонке ses_type 3 основных типа сессий: reccomend tips_show, search-card, reccomend complex мне нужно подобрать 300 наблюдений для каждой группы, для проведения А/Б теста, есть ли для этого специальный метод, который позволил бы мне выбирать рандомные сессий разных типов, но близкие по дате/ времени.
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Предложу следующий порядок (см. комментарии в коде).
df = pd.read_csv('https://drive.google.com/uc?export=download&id=1n19a-zaFWkNj6wUcKWMzaOVMk752Z9dH')
df = df[df.ses_type.isin(['reccomend tips_show', 'search-card', 'reccomend complex'])] # оставляем во фрейме события только нужных типов
max_date = df.event_time.astype('datetime64[D]').value_counts().idxmax() # вычисляем дату, в которую было больше всего событий
df = df[df.event_time.astype('datetime64[D]').eq(max_date)] # оставляем только те события, которые произошли в эту дату
df1 = df[df.ses_type.eq('reccomend tips_show')].sample(100) # выбираем случайным образом 100 событий 1-го типа
df2 = df[df.ses_type.eq('search-card')].sample(100) # выбираем случайным образом 100 событий 2-го типа
df3 = df[df.ses_type.eq('reccomend complex')].sample(100) # выбираем случайным образом 100 событий 3-го типа
out = pd.concat([df1, df2, df3]) # объединяем все выборки в один фрейм
print(out.shape[0]) # проверяем, что выбралось 300
print(out.head(50)) # выводим образец данных