我一直在努力获取数据帧中特定 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