Set majority cluster to each user

Viewed 26

I have duplicate id_user and their cluster, how to set new cluster based on their majority cluster number like this

id_user   | cluster  | new cluster
1         |   a      |  a
1         |   a      |  a
2         |   b      |  b
2         |   b      |  b
2         |   a      |  b
1 Answers

Use GroupBy.transform and Series.mode

df['new cluster'] = df.groupby('id_user')['cluster'].transform(lambda x: x.mode()[0])

Or:

df['new cluster'] = df['id_user'].map(pd.crosstab(df['id_user'],
                                                  df['cluster']).idxmax(axis=1))

   id_user cluster new cluster
0        1       a           a
1        1       a           a
2        2       b           b
3        2       b           b
4        2       a           b
Related