I have a dataframe like this:
Var Name | Val |
---|---|
a | 11 |
a | 1 |
a | 2 |
b | 3 |
b | 4 |
I would like to add a column with updated and enumerated "Var Name", something like this
Var Name | Val | Var Name |
---|---|---|
a | 11 | a1 |
a | 1 | a2 |
a | 2 | a3 |
b | 3 | b1 |
b | 4 | b2 |
My idea is to enumerate the Var Name (1,2,3...)
till it "recognizes" a new Var Name and
start enumerating again from 1.
CodePudding user response:
groupby
cumcount
is what you need here:
df['Var Name2'] = df['Var Name'] df.groupby('Var Name').cumcount().add(1).astype(str)
Output:
>>> df
Var Name Val Var Name2
0 a 11 a1
1 a 1 a2
2 a 2 a3
3 b 3 b1
4 b 4 b2
To add extra characters, such as an underscore:
df['Var Name2'] = df['Var Name'] '_' df.groupby('Var Name').cumcount().add(1).astype(str)