使用时间频率大熊猫GROUPBY(Pandas Groupby using time frequen

2019-10-28 08:05发布

我的问题是关于大熊猫据帧的GROUPBY。 样本数据集是这样的:

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

现在我想GROUPBY 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

我的道歉最初的混乱!

Answer 1:

你的代码是为我工作

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


文章来源: Pandas Groupby using time frequency