【问题标题】:How to groupby datetime data by ID and time period?如何按 ID 和时间段对日期时间数据进行分组?
【发布时间】:2019-09-07 15:36:18
【问题描述】:

所以我有这种数据。基本上有一群人在做某事,我们会跟踪他们。所以我对其中一项活动感兴趣,即跑步。 ID - 人的 id,日期 - 日期,DONE - 如果他们当天运行,则为是。我想知道在特定时期人们进行了多少次该活动。

ID             DATE              DONE  
1           2009-1-3             Yes
1           2009-1-15            Yes
2           2009-9-3             Yes
3           2009-10-7            No
1           2009-12-1            Yes
3           2009-10-8            Yes
2           2009-10-21           Yes

我想要这样的东西,不一定完全一样。

ID          PERIOD              COUNT
1           2009-1              2
            2009-12             1
2           2009-9              1
            2009-10             1
3           2009-10             1

提前致谢!

【问题讨论】:

    标签: pandas pandas-groupby data-science


    【解决方案1】:

    如果还需要计数 No 值,例如 0 聚合 sum 和布尔掩码,月份使用 Series.dt.to_period

    df1 = ((df['DONE'] == 'Yes')
            .groupby([df['ID'], pd.to_datetime(df['DATE']).dt.to_period('m')])
            .sum()
            .astype(int)
            .reset_index(name='COUNT'))
    print (df1)
       ID     DATE  COUNT
    0   1  2009-01      2
    1   1  2009-12      1
    2   2  2009-09      1
    3   2  2009-10      1
    4   3  2009-10      1
    

    或者您可以先只过滤带有Yes 的行,然后按GroupBy.size 聚合计数:

    df1 = (df[df['DONE'] == 'Yes']
            .groupby(['ID', pd.to_datetime(df['DATE']).dt.to_period('m')])
            .size()
            .reset_index(name='COUNT'))
    print (df1)
       ID     DATE  COUNT
    0   1  2009-01      2
    1   1  2009-12      1
    2   2  2009-09      1
    3   2  2009-10      1
    4   3  2009-10      1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-28
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      相关资源
      最近更新 更多