代码之家  ›  专栏  ›  技术社区  ›  Baktaawar David Maust

如何在熊猫中基于时间变量创建会话变量

  •  0
  • Baktaawar David Maust  · 技术社区  · 6 年前

    假设我有这样一个带有时间戳和用户ID的数据集。

    我想创建一个“会话”变量,这样我就可以指定一个时间(1分钟或2分钟),并为每个用户ID指定一个时间,如果用户ID中的下一个时间在这个时间(1或2分钟左右),那么这两个时间都记录为同一个会话。基本上,我看第一次,然后计算下一次的差异,如果在1分钟内,那么相同的会话。类似地,如果会话发生变化,那么我们将新会话时间作为基准时间,并计算与新会话时间相关的所有后续访问时间。

    我希望这个时间帧像一个变量,可以玩,而不是硬编码。

    我可以在SQL中用window函数来实现这一点。想知道在熊猫身上怎么做。

    time company_id
        2018-10-23 00:01:23 113141P
        2018-10-23 00:01:29 113141P
        2018-10-23 00:07:37 113141P
        2018-10-23 00:22:23 113141P
        2018-10-23 00:23:10 113141P
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   sacuL    6 年前

    你可以用 transform 具有 diff cumsum :

    # If not in datetime format already:
    df['time'] = pd.to_datetime(df['time'])
    
    # sort_values('time') is there just in case it's not already sorted
    df['session'] = (df.sort_values('time').groupby('company_id')['time']
                     .transform(lambda x: (x.diff() > '00:02:00')
                                .cumsum()))
    
    >>> df
                     time company_id  session
    0 2018-10-23 00:01:23    113141P        0
    1 2018-10-23 00:01:29    113141P        0
    2 2018-10-23 00:07:37    113141P        1
    3 2018-10-23 00:22:23    113141P        2
    4 2018-10-23 00:23:10    113141P        2