我有一个看起来像

       A      B
0     1.2     1
1     1.2     6
2     1.2     4
3     2.3     2
4     2.3     5
5     1.2     7

我想得到一个群的部分和,这个群的值是相同的,但前提是它们相邻对于这种情况,我希望另一个DataFrame
0    1.2    11
3    2.3    7
5    1.2    7

我有一种感觉,我可以使用A但我只能管理它工作,不管DataFrame的组是否相邻。

最佳答案

使用groupbyby helperSeries与aggregatefirstsum

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

详细信息:
shiftd列与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发表评论:
当dtype为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]

10-03 00:11