在DataFrame中获得连续几周的第一周

Jua*_*n C 4 python group-by pandas

我一直在努力尝试获取连续连续几周的第一周,以获取DataFrame中的特定ID,如下所示:

week     id
 1        1
 2        1
 3        1
 6        1
 7        1
 8        1
 3        2
 4        2
Run Code Online (Sandbox Code Playgroud)

因此,对于ID 1,连续三个星期(1-3),然后连续三个星期(6-8),对于ID 2,连续2个星期(3-4)。因此,我想要的输出将是:

week     id   first_week
 1        1       1
 2        1       1
 3        1       1
 6        1       6
 7        1       6
 8        1       6
 3        2       3
 4        2       3
Run Code Online (Sandbox Code Playgroud)

我能够以此计算连续几周:

df.groupby(['id',df['week'].diff(-1).ne(-1).shift().bfill().cumsum()]).transform('count')
Run Code Online (Sandbox Code Playgroud)

但是我找不到第一周(我想构造一个新的ID,以添加从哪一周开始连续几周的连胜)

WeN*_*Ben 8

groupby获取diff和条件分配,然后ffill获取nan

df.loc[df.groupby('id').week.diff().ne(1),'fw']=df.week
df.fw=df.fw.ffill()
df
Out[158]: 
   week  id   fw
0     1   1  1.0
1     2   1  1.0
2     3   1  1.0
3     6   1  6.0
4     7   1  6.0
5     8   1  6.0
6     3   2  3.0
7     4   2  3.0
Run Code Online (Sandbox Code Playgroud)