Home > Software engineering >  How can I get the positions of a group?
How can I get the positions of a group?

Time:10-09

I have pandas dataframe like this

data = [[1, 'a'], [2, 'a'], [3, 'b'], [4, 'b'], [5, 'a'], [6, 'c']]
df1 = pd.DataFrame(data, columns=['Id', 'Group'])
Id    Group
 1      a
 2      a
 3      b
 4      b
 5      a
 6      c

Without changing order I need to get the position of every Id based on the `Group.

Basically, I want below output

Id    Group   position
 1      a         1
 2      a         2
 3      b         1
 4      b         2
 5      a         3
 6      c         1

CodePudding user response:

try, transform cumcount

df1['position'] = df1.groupby('Group').transform('cumcount')   1

   Id Group  position
0   1     a         1
1   2     a         2
2   3     b         1
3   4     b         2
4   5     a         3
5   6     c         1

CodePudding user response:

You can simply do it by GroupBy.cumcount

df1['position'] = df1.groupby('Group').cumcount()   1

GroupBy.cumcount numbers each item in each group from 0 to the length of that group - 1. It is NOT an aggregated function producing condensed result. So no need to use .transform() to propagate aggregated result back to each item of the whole group.

Result:

print(df1)

   Id Group  position
0   1     a         1
1   2     a         2
2   3     b         1
3   4     b         2
4   5     a         3
5   6     c         1
  • Related