numpy Pandas成组连续,并标注长度

8ehkhllq  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(109)

我希望获得标记为连续长度的数据

a 
---
1   
0 
1 
0 
1 
1 
1 
0 
1
1

我想:

a | c 
--------
1   1
0   0
1   2
1   2
0   0
1   3
1   3
1   3
0   0
1   2
1   2

然后我就可以计算出一组一组的“b”列的平均值。尝试用Shift和Cumsum和Cumcount都不起作用。

gmxoilav

gmxoilav1#

按连续分组使用GroupBy.transform,如果不是1,则在a列中设置0

df['c1'] = (df.groupby(df.a.ne(df.a.shift()).cumsum())['a']
              .transform('size')
              .where(df.a.eq(1), 0))
print (df)
    a  b  c  c1
0   1  1  1   1
1   0  2  0   0
2   1  3  2   2
3   1  2  2   2
4   0  1  0   0
5   1  3  3   3
6   1  1  3   3
7   1  3  3   3
8   0  2  0   0
9   1  2  2   2
10  1  1  2   2

如果只有0, 1值,则可以乘以a

df['c1'] = (df.groupby(df.a.ne(df.a.shift()).cumsum())['a']
              .transform('size')
              .mul(df.a))
print (df)
    a  b  c  c1
0   1  1  1   1
1   0  2  0   0
2   1  3  2   2
3   1  2  2   2
4   0  1  0   0
5   1  3  3   3
6   1  1  3   3
7   1  3  3   3
8   0  2  0   0
9   1  2  2   2
10  1  1  2   2

相关问题