python - 将具有相同列值的 DataFrame 行加在一起,但保留顺序
问题描述
我有一个看起来像这样的熊猫数据框:
a b c
8 3 3
4 3 3
5 3 3
1 9 4
7 3 1
1 3 3
6 3 3
9 7 7
1 7 7
我想得到一个像这样的DataFrame:
a b c
17 3 3
1 9 4
7 3 1
7 3 3
10 7 7
a
本质上,当列中的值和列中的值相同时,我想将列中的b
值加在一起c
,但我想分段进行。groupby
在这里不起作用,因为它会使 DataFrame 乱序。我有一个迭代解决方案,但它很混乱而且不是很 Pythonic。有没有办法使用 DataFrame 的功能来做到这一点?
解决方案
让我们shift
通过cumsum
键创建子组
s = df[['b','c']].ne(df[['b','c']].shift()).all(1).cumsum()
out = df.groupby([s,df.b,df.c]).agg({'a':'sum','b':'first','c':'first'}).reset_index(drop=True)
a b c
0 17 3 3
1 1 9 4
2 7 3 1
3 7 3 3
4 10 7 7