Предполагая, что вы группируете по дате и по COL2, вот решение с одним вкладышем:
Создание кадра данных:
>>> import pandas as pd
>>> df = pd.DataFrame({'Date': ['2017/01/01', '2017/01/01', '2017/01/01', '2017/01/02', '2017/01/02', '2017/01/02'],
'COL1': [123, 234, 135, 123, 135, 246],
'COL2': ['A', 'A', 'B', 'A', 'B', 'B'],
'COL3': ['N', 'N', 'Y', 'N', 'N', 'Y']})
>>> df
Date COL1 COL2 COL3
0 2017/01/01 123 A N
1 2017/01/01 234 A N
2 2017/01/01 135 B Y
3 2017/01/02 123 A N
4 2017/01/02 135 B N
5 2017/01/02 246 B Y
Один код лайнера:
>>> df.join(((df.COL3 == 'N')*2 - 1).rename('Count').to_frame()).groupby(['Date','COL2']).Count.sum().groupby(level=[1]).cumsum().reset_index()
Date COL2 Count
0 2017/01/01 A 2
1 2017/01/01 B -1
2 2017/01/02 A 3
3 2017/01/02 B -1
Пояснение:
Сначала я создал еще один столбец, выведя значение суммы из COL3
, назвав его Count
, затем приступил к выполнению группировки sum
, чтобы получить сумму для каждой комбинации Date
, COL2
, затем наконец группа cumsum
на уровне COL2
, чтобы получить скользящий счет.