如何分离pandas中的连续组?

时间:2017-07-27 07:04:37

标签: python

问题可能很奇怪,所以这是一个例子。

假设我的数据如下所示:

A  B  
a  2
a  1 
a  1 
b  3 
b  1 
a  4
c  3
c  6
c  7

如你所见,有3个元素a,b,c,我们可以只分组和&汇总如:

a  8 
b  4 
c  16

但我真正想做的是,我想在“群体内”“分离”。 所以期望的结果是:

a  4 
b  4 
a  4
c  16

这意味着第一个连续的“a”组和后面出现的第二个“a”被视为不同。让我简单地通过列表向您展示。

[[a,a,a],[b,b],[a],[ccc]] 

关键是我们必须考虑序列。它不只是使用pandas cumcount,它只考虑外观的数量。我想划分每个'序列',甚至在同一个元素组中。(第一个aaa和第二个aaa是不同的)

我不认为熊猫这么简单,虽然我只是通过制作明确的基于功能的逻辑来避免做这项工作。简而言之,我想更简单地做到这一点。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用 shift-cumsum模式

>>> df.groupby((df['A'] != df['A'].shift()).cumsum(), as_index=False).agg(
        {'A': 'first', 'B': 'sum'})
# Output:
#        A   B
#     0  a   4
#     1  b   4
#     2  a   4
#     3  c  16