Pandas Groupby-根据组的变化添加顺序元素

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

我有一个这样的df。

enter image description here

我想先用A分组,然后用B分组,然后得到序列列,这样每次当B分组发生变化时,下一个分组的第一个元素是前一个分组计数的((x+8)-(x%8))+1。例如,B1的计数是5,因此B2的第一个元素应该是((5+8)-(5%8))+1 =9,然后这个序列继续为该分组服务。

而一旦A组发生变化,序列又应该从1开始。

这就是需要的输出。

enter image description here

python pandas-groupby
1个回答
0
投票

我不明白 "B组 "每次变化的计算逻辑,所以直到最后才完成。如果能用上,请大家做个参考。如果完全不能用,请评论。删掉。

df['flg'] = 1
df['a_seq'] = df.groupby('A')['flg'].agg('cumsum')
df['b_seq'] = df.groupby('B')['flg'].agg('cumsum')

df['Sequence'] = np.where(df['b_seq'] == df['a_seq'], df['b_seq'], df['a_seq'].apply(lambda x: ((x+8)-(x%8))+1))

    A   B   flg a_seq   b_seq   Sequence
0   1   B1  1   1   1   1
1   1   B1  1   2   2   2
2   1   B1  1   3   3   3
3   1   B2  1   4   1   9
4   1   B2  1   5   2   9
5   1   B2  1   6   3   9
6   1   B2  1   7   4   9
7   2   B3  1   1   1   1
8   2   B3  1   2   2   2
9   2   B3  1   3   3   3
10  2   B3  1   4   4   4
11  2   B3  1   5   5   5
12  2   B4  1   6   1   9
13  2   B4  1   7   2   9
14  2   B5  1   8   1   17
15  2   B5  1   9   2   17
16  2   B5  1   10  3   17
17  2   B5  1   11  4   17
18  2   B5  1   12  5   17
19  2   B6  1   13  1   17
20  2   B6  1   14  2   17
© www.soinside.com 2019 - 2024. All rights reserved.