【问题标题】:Before and after state transitions状态转换前后
【发布时间】:2018-09-06 10:14:07
【问题描述】:

我有一个 df

   uid       timestamp               event
   34900     2015-01-01 00:00:10     5
   90100     2015-01-07 00:00:00     4
   90100     2015-03-02 00:00:00     9
   34900     2015-01-03 00:00:00     5
   34900     2015-01-01 00:40:00     6
   34900     2015-01-01 00:00:01     2
   90100     2015-03-01 00:07:00     5
   34900     2015-01-04 00:00:09     8
   34900     2015-01-07 00:00:10     2
   90100     2015-01-01 20:00:00     1

它在某些唯一 ID (34900,90100,..) 上发生事件 (1-9),时间戳记为日期时间。

我试图找出每个唯一 ID 上发生事件 (event=5) 之前和之后发生的情况。我的想法是将 df 子集化为每个唯一事件,并为每个发生的 5 个事件保留相邻事件。

所以我想知道如何从上面的df中检索下面的数据帧

uid=34900

   timestamp               before      after
   2015-01-01 00:00:10     2           6
   2015-01-03 00:00:00     6           8

uid=90100

   timestamp               before      after
   2015-03-01 00:07:00     4           9

【问题讨论】:

    标签: python pandas datetime group-by


    【解决方案1】:

    我昨天刚问了同样的问题,但是是针对 SQL 的。我被告知了领先/滞后功能。你可以找到我的问题here

    一旦我了解了领先和滞后,就很容易进一步研究此事。看起来this 问题包含您在 Python 中寻找的解决方案。

    【讨论】:

    • 谢谢,我根据您上面的建议发布了我使用的代码。
    【解决方案2】:

    根据 Sparrower 的建议,我对数据进行了排序并使用以下内容来获得所需的输出。

    df['before'] = df.groupby(['uid'])['event'].shift(1)
    df['after']  = df.groupby(['uid'])['event'].shift(-1)
    df1 = df[df['event']==5]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多