Given the following dataframe:
df = pd.DataFrame({"values": ["a", "a", "a", "b", "b", "a", "a", "c"]})
How could I generate the given output:
  values  out
0      a    0
1      a    1
2      a    2
3      b    0
4      b    1
5      a    0
6      a    1
7      c    0
I can (if it allows easier options) ensure uniqueness over groups, hence having input values like:
df = pd.DataFrame({"values": ["a0", "a0", "a0", "b0", "b0", "a1", "a1", "c0"]})
 
    