我希望获得标记为连续长度的数据
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都不起作用。
gmxoilav1#
按连续分组使用GroupBy.transform,如果不是1,则在a列中设置0:
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:
0, 1
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
1条答案
按热度按时间gmxoilav1#
按连续分组使用
GroupBy.transform
,如果不是1
,则在a
列中设置0
:如果只有
0, 1
值,则可以乘以a
: