使用
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
对于连续组
系列
:
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发表评论:
当数据类型为float时,检查是否相等可能会导致不需要的结果。在这里,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]