Pandas Groupby - добавление последовательных элементов на основе групповых изменений - PullRequest
0 голосов
/ 26 мая 2020

У меня такой 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

1 Ответ

0 голосов
/ 26 мая 2020

Я не понял logi c для расчета каждого изменения в «группе 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...