获取每行值的最常见值 - pandas数据帧

3

这可能是一个重复的问题,请告诉我。

我有一个像这样的pandas数据框:

id name common
One A
One A
One A
One B
Two C

我想要输出这样的结果:

每个id的最常见名称放在了common列中。

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.groupby(['id'])['name'].transform(lambda x: x.value_counts().index[0]) 或者使用 x.mode()[0] - Quang Hoang
@QuangHoang 这个有效了,谢谢! - smitty_werben_jagerm
2个回答

3

这个有效:

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

0

一种更长(可能较慢)的处理过程是进行数据透视和映射:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接