如何使用groupby将每个组与前一个重叠组分组?

问题描述 投票:0回答:1

我的数据框:

import pandas as pd

df = pd.DataFrame(
    {
        'a': list('xxxxxxxxxxyyyyyyyyy'),
        'b': list('1111222333112233444')
    }
)

预期输出是组列表:

  a  b
0   x  1
1   x  1
2   x  1
3   x  1
4   x  2
5   x  2
6   x  2

    a  b
4   x  2
5   x  2
6   x  2
7   x  3
8   x  3
9   x  3

    a  b
10  y  1
11  y  1
12  y  2
13  y  2

    a  b
12  y  2
13  y  2
14  y  3
15  y  3

    a  b
14  y  3
15  y  3
16  y  4
17  y  4
18  y  4

逻辑:

分组从

df.groupby(['a', 'b'])
开始,然后我想将每个组与其前一个组连接起来,这给了我预期的输出。

也许我提到的最初分组是没有必要的。

请注意,在预期输出中,

a
列不能同时包含
x
y

老实说,重叠行并不是我在使用

groupby
时所做的事情。所以我不知道如何尝试去做。我尝试过
df.b.diff()
,但还差得远。

python pandas dataframe
1个回答
0
投票

您可以组合

groupby
itertools.pairwise
concat

from itertools import pairwise

out = [pd.concat([a[1], b[1]]) for a, b in pairwise(df.groupby(['a', 'b']))]

输出:

[   a  b
 0  x  1
 1  x  1
 2  x  1
 3  x  1
 4  x  2
 5  x  2
 6  x  2,
    a  b
 4  x  2
 5  x  2
 6  x  2
 7  x  3
 8  x  3
 9  x  3,
     a  b
 7   x  3
 8   x  3
 9   x  3
 10  y  1
 11  y  1,
     a  b
 10  y  1
 11  y  1
 12  y  2
 13  y  2,
     a  b
 12  y  2
 13  y  2
 14  y  3
 15  y  3,
     a  b
 14  y  3
 15  y  3
 16  y  4
 17  y  4
 18  y  4]
© www.soinside.com 2019 - 2024. All rights reserved.