我的数据框:
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()
,但还差得远。
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]