Счетчик бега с условием покоя в другой строке - PullRequest
2 голосов
/ 09 июля 2020

У меня есть фрейм данных, в котором я хочу продолжать увеличивать значение до тех пор, пока val не изменится, а когда id изменения не сбросят count значение

data = [['p1','1'],
        ['p1','1'],
        ['p1','2'],
        ['p2','3'],
        ['p2','5'],
        ['p3','2']]

df = pd.DataFrame(data = data,columns = ['id','val'])

Желаемый результат

   id val count
0  p1   1     1  
1  p1   1     1
2  p1   2     2
3  p2   3     1
4  p2   5     2
5  p3   2     1

Я мог придумать только то, что производит суммирование, но мне нужен счетчик

df_1.groupby('id')['val'].cumsum()

Мой нежелательный результат

   id  val  count
0  p1    1      1
1  p1    1      2
2  p1    2      4
3  p2    3      3
4  p2    5      8
5  p3    2      2

1 Ответ

2 голосов
/ 09 июля 2020

Вы можете попробовать с transform + factorize

df['count']=df.groupby('id').val.transform(lambda x : x.factorize()[0]+1)
0    1
1    1
2    2
3    1
4    2
5    1
Name: val, dtype: int32
...