Есть следующая последовательность
import pandas as pd
a = pd.DataFrame({'index':range(13),'a':[1,1,1,2,2,2,1,1,3,3,4,3,5]})
index a
0 1
1 1
2 1
3 2
4 2
5 2
6 1
7 1
8 3
9 3
10 4
11 3
12 5
Необходимо посчитать количество повторений каждого элемента и добавить столбец, например Range:
index a Range
0 1 1
1 1 2
2 1 3
3 2 1
4 2 2
5 2 3
6 1 1
7 1 2
8 3 1
9 3 2
10 4 1
11 3 1
12 5 1
Хочется сделать это без циклов, а то у меня слишком много вычислений, в итоге получается очень долгое выполнение. Я наваял вот такой код:
group = a.groupby(["a"])[["index"]]
a = a.assign(Range = a[['index']]-group.transform(min)+1)
Но при попадании одинаковых значений (например, в столбце a идут три единицы подряд, а потом они повторяются в id: 6,7) он считает с того места, где прошлые единицы закончились, т.е. это будет 7,8 единицы в списке:
index a Range
0 1 1
1 1 2
2 1 3
3 2 1
4 2 2
5 2 3
6 1 7
7 1 8
8 3 1
9 3 2
10 4 1
11 3 4
12 5 1