在数据帧中获取连续一周的第一周



我一直在努力获取数据帧中特定 id 连续连续一周的第一周,如下所示:

week     id
 1        1
 2        1
 3        1
 6        1
 7        1
 8        1
 3        2
 4        2

因此,对于 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

我能够用这个计算连续的周数:

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

但是我找不到第一周(我想构建一个新id,添加连续几周的连胜开始的一周(

>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

最新更新