簡體   English   中英

使用時間頻率的熊貓群

[英]Pandas Groupby using time frequency

我的問題是關於大熊貓數據框的分組依據。 樣本數據集如下所示:

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]

提前致謝

編輯:

遵循Wen的回答,我嘗試並使用了該最小示例,但是我對提供一個不具有代表性的最小示例很不好。 可以使用此示例為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

對於最初的困惑,我深表歉意!

您的代碼對我有用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM