获取行中每个值的最常见值 - pandas df

Get most common value for each value in row - pandas df

这可能是重复的,请告诉我。

我有一个 pandas df 是这样的:

id name Common
One A
One A
One A
One B
Two C

我想输出这样的东西:

每个 ID 最常用的名称放在常用列中。

id name Common
One A A
One A A
One A A
One B A
Two C C

我试过了,但此时我在黑暗中投掷飞镖

df.groupby(['id', 'name']).agg(lambda x:x.value_counts().index[0])

这个有效:

df['Common'] = df.groupby('id')['name'].transform(lambda x: x.mode()[0])

输出:

>>> df
    id name Common
0  One    A      A
1  One    A      A
2  One    A      A
3  One    B      A
4  Two    C      C

一个更长(可能更慢)的过程是旋转和映射:

df.assign(Common = df.id.map(df.pivot(None, 'id', 'name').mode().T.squeeze()))
 
    id name Common
0  One    A      A
1  One    A      A
2  One    A      A
3  One    B      A
4  Two    C      C