【问题标题】:Grouping by two columns and by week with Pandas使用 Pandas 按两列和按周分组
【发布时间】:2020-07-23 02:57:33
【问题描述】:

我有一个像这样的数据框:

ID timestamp field2
ABC 456788   event1
ABC 456688   event2
DEF 856788   event1
ABC 96788    event1

我希望得到这个结果,按周分组:

ID timestamp      field2 count
ABC 29/03/2020    event1   2
ABC 22/03/2020    event2   1
DEF 29/03/2020    event1   1

所以我设法使用此代码对时间戳进行分组并将其转换为日期:

grouper = dftest.groupby(['ID', 'field2', pd.Grouper(key='timestamp', freq='W')])

但是当我这样做以查看结果时:

grouper.count().reset_index()[(grouper.count().reset_index().ID == "ABC")]

我不明白计数。此外,它只留下其中一行具有(相同的字段2,由同一周内的同一用户)。

这就像分组但没有计数(因为在这种情况下,用户 ABC 在同一周 (29/03/2020) 有两个 event1)。我得到的结果如下:

    ID timestamp      field2
    ABC 29/03/2020    event1
    ABC 22/03/2020    event2

我已经在这里阅读了很多帖子和文档,但我无法弄清楚。我可以尝试解决什么问题?

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    如果需要使用count 函数,请在groupby 之后指定列名,然后为新列使用Series.reset_indexname 参数:

    df = (dftest.groupby(['ID', 'field2', pd.Grouper(key='timestamp', freq='W')])['ID']
                .count()
                .reset_index(name='count'))
    

    【讨论】:

    • 感谢您的回复,但我得到了:ValueError: cannot insert ID, already exists
    • 现在您的编辑成功了!为什么在您对答案进行编辑后,我在上一条评论中发送的错误不再发生?
    • @CatarinaNogueira - 因为使用了name='count' 参数。
    猜你喜欢
    • 2017-04-28
    • 2019-08-08
    • 1970-01-01
    • 2014-03-02
    • 2022-07-06
    • 2017-03-25
    • 2022-11-12
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多