在状态转换之前和之后

时间:2018-03-27 21:09:15

标签: python pandas datetime group-by

我有一个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上发生事件(事件= 5)之前和之后发生的事情。我的想法是将df分配到每个唯一的事件中,并为每个发生的事件保留相邻的事件。

所以我想知道如何从上面的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

2 个答案:

答案 0 :(得分:0)

我昨天刚问了同样的问题,但对于SQL。我被告知了超前/滞后功能。您可以找到我的问题here

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

答案 1 :(得分:0)

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

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