【问题标题】:Pandas Groupby using time frequencyPandas Groupby 使用时间频率
【发布时间】:2018-09-25 12:14:22
【问题描述】:

我的问题是关于熊猫数据框的 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 天内发生的事件并为这些事件编译类别列表。到目前为止我想到的是按以下方式使用 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 版本的 pandas 重新创建。

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

对于最初的困惑,我深表歉意!

【问题讨论】:

    标签: python pandas pandas-groupby data-science


    【解决方案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
    

    【讨论】:

    • 感谢您的回答。这真的很奇怪,我试了两次,一次没有重置索引,一次重置,都没有给我想要的答案,它一直给我[cat1,cat2]然后[cat3]
    • 所以我在我的另一台笔记本电脑上检查了一下,它工作正常,检查了 pandas 版本,它在 '0.20.3' 中工作,在 '0.23.0' 中没有工作,想知道为什么我找不到任何表明对 pd.Grouper 进行更改的内容 :(
    • @words_of_wisdom 你可以改成time grouper
    • 您能举个例子吗?
    • @words_of_wisdom iam at pd.__version__ Out[1232]: '0.22.0'
    猜你喜欢
    • 2020-02-07
    • 1970-01-01
    • 2020-11-20
    • 2020-11-17
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2014-12-08
    • 2018-04-13
    相关资源
    最近更新 更多