利用时间频率对Pandas进行分组

2024-09-28 21:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是关于pandas的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

现在我想按cust_id分组,然后找出在30天内发生的事件,并为这些事件编译类别列表。我现在想的是石斑鱼按以下方式。在

^{pr2}$

但这并没有把[cat1,cat2,cat3]放在a001的同一个列表中。如果你能帮助我做错事,或者我能做我需要的事情,我将不胜感激。在

我想要的结果应该是这样的:

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

提前谢谢

编辑:

按照温总理的回答,我试着用了这个最小的例子,我的缺点是提供了一个不具代表性的最低限度的例子。对于pandas的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

我为最初的混乱道歉!在


Tags: 数据id示例pandasdate事件categorycat1
1条回答
网友
1楼 · 发布于 2024-09-28 21:29:26

你的代码是为我工作的

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

相关问题 更多 >