在熊猫中按组获得最长连续周的连续记录

Jua*_*n C 4 python time-series pandas

目前我正在处理不同主题的每周数据,但它可能有一些没有数据的长时间连续记录,所以,我想做的是保持每个id. 我的数据如下所示:

id    week
1      8
1      15
1      60
1      61
1      62
2      10
2      11
2      12
2      13
2      25
2      26
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:

id    week
1      60
1      61
1      62
2      10
2      11
2      12
2      13
Run Code Online (Sandbox Code Playgroud)

我有点接近,试图在week==时用 1 标记week.shift()+1。问题是这种方法不会标记连续发生的第一次,而且我也无法过滤最长的一次:

df.loc[ (df['id'] == df['id'].shift())&(df['week'] == df['week'].shift()+1),'streak']=1
Run Code Online (Sandbox Code Playgroud)

根据我的例子,这将带来:

id    week  streak
1      8     nan
1      15    nan
1      60    nan
1      61    1
1      62    1
2      10    nan
2      11    1
2      12    1
2      13    1
2      25    nan
2      26    1
Run Code Online (Sandbox Code Playgroud)

关于如何实现我想要的任何想法?

Sco*_*ton 7

尝试这个:

df['consec'] = df.groupby(['id',df['week'].diff(-1).ne(-1).shift().bfill().cumsum()]).transform('count')

df[df.groupby('id')['consec'].transform('max') == df.consec]
Run Code Online (Sandbox Code Playgroud)

输出:

   id  week  consec
2   1    60       3
3   1    61       3
4   1    62       3
5   2    10       4
6   2    11       4
7   2    12       4
8   2    13       4
Run Code Online (Sandbox Code Playgroud)