我有一个这样的df。
我想先用A分组,然后用B分组,然后得到序列列,这样每次当B分组发生变化时,下一个分组的第一个元素是前一个分组计数的((x+8)-(x%8))+1。例如,B1的计数是5,因此B2的第一个元素应该是((5+8)-(5%8))+1 =9,然后这个序列继续为该分组服务。
而一旦A组发生变化,序列又应该从1开始。
这就是需要的输出。
我不明白 "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