我有一个看起来像
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
的组是否相邻。 最佳答案
使用groupby
by helperSeries
与aggregatefirst
和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发表评论:
当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]