Использование groupby
помощником Series
с совокупностью first
и sum
:
df = df.groupby(df.A.ne(df.A.shift()).cumsum(), as_index=False).agg({'A':'first','B':'sum'})
print (df)
A B
0 1.2 11
1 2.3 7
2 1.2 7
Деталь :
Сравните shift
d столбец с ne
(!=
) и добавьте cumsum
для последовательных групп Series
:
print (df.A.ne(df.A.shift()).cumsum())
0 1
1 1
2 1
3 2
4 2
5 3
Name: A, dtype: int32
Спасибо @ user2285236 за комментарий:
Проверка на равенство может привести к нежелательным результатам, когда dtype равен float.np.isclose может быть лучшим вариантом здесь
df = df.groupby(np.cumsum(~np.isclose(df.A, df.A.shift())), as_index=False).agg({'A':'first','B':'sum'})
print (df)
A B
0 1.2 11
1 2.3 7
2 1.2 7
print (np.cumsum(~np.isclose(df.A, df.A.shift())))
[1 1 1 2 2 3]