Pandas Groupby с использованием временной частоты - PullRequest
0 голосов
/ 25 сентября 2018

Мой вопрос касается группы данных панд.Примерный набор данных будет выглядеть следующим образом:

cust_id | date       | category
A0001   | 20/02/2016 | cat1
A0001   | 24/02/2016 | cat2
A0001   | 02/03/2016 | cat3
A0002   | 03/04/2015 | cat2

Теперь я хочу сгруппировать cust_id, а затем найти события, которые происходят в течение 30 дней друг от друга, и составить список категорий для них.На данный момент я решил использовать pd.grouper следующим образом.

df.groupby(['cust_id', pd.Grouper(key='date', freq='30D')])['category'].apply(list)

Но это не помещает [cat1, cat2, cat3] в тот же список для A0001.Любая помощь в том, что я делаю неправильно или как я могу делать то, что мне нужно, будет очень цениться.

Результаты, которые я хочу, должны выглядеть примерно так:

A0001 | [cat1, cat2, cat3]
A0002 | [cat2]

Заранее спасибо

Редактировать:

После ответа Вена я попытался, и этоработал для этого минимального примера, мой плохой для предоставления минимального примера, который не был представительным.Это можно воссоздать с помощью этого примера для версий панд как 0,20,3, так и 0,23,0.

cust_id date    category
0   A0001   2015-02-02  cat5
1   A0002   2015-02-03  cat1
2   A0001   2016-02-20  cat1
3   A0001   2016-02-24  cat2
4   A0001   2016-03-02  cat3
5   A0003   2016-09-09  cat2
6   A0003   2016-08-21  cat5

Ответ, который я получаю:

cust_id
A0001          [cat5]
A0001    [cat1, cat2]
A0001          [cat3]
A0002          [cat1]
A0003          [cat5]
Name: category, dtype: object

Мои извинения за первоначальное замешательство!

1 Ответ

0 голосов
/ 25 сентября 2018

Ваш код для меня работает

df.date=pd.to_datetime(df.date)
df.groupby(['cust_id', pd.Grouper(key='date', freq='30D')])['category'].apply(list).reset_index(level=1,drop=True)
Out[215]: 
cust_id
A0001       [ cat1,  cat2,  cat3]
A0002                     [ cat2]
Name: category, dtype: object
...