首页 > 解决方案 > 将具有相同列值的 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 的功能来做到这一点?

标签: pythonpandasdataframenumpy

解决方案


让我们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

推荐阅读