我有一个 Pandas 数据框:
id city
000.tushar@gmail.com Bangalore
00078r@gmail.com Mumbai
0007ayan@gmail.com Jamshedpur
0007ayan@gmail.com Jamshedpur
000.tushar@gmail.com Bangalore
00078r@gmail.com Mumbai
00078r@gmail.com Vijayawada
00078r@gmail.com Vijayawada
00078r@gmail.com Vijayawada
我想按 ID 查找出现次数最多的城市名称。因此,对于给定的 ID,我可以说 - 这是他最喜欢的城市:
id city
000.tushar@gmail.com Bangalore
00078r@gmail.com Vijayawada
0007ayan@gmail.com Jamshedpur
使用 groupby id 和 city 给出:
id city count
0 000.tushar@gmail.com Bangalore 2
1 00078r@gmail.com Mumbai 2
2 00078r@gmail.com Vijayawada 3
3 0007ayan@gmail.com Jamshedpur 2
如何进行下一步?我相信一些 group-by apply 会这样做,但不知道究竟是什么会起到这个作用。所以请提出建议。
如果一些 id 对于两个或三个城市具有相同的计数,我可以返回任何这些城市。
最佳答案
您可以尝试将 groupby
与 size
结合使用和 idxmax
.输出是元组列表(因为 MultiIndex
),所以使用 apply
:
df = df.groupby(['id','city']).size().groupby(level=0).idxmax()
.apply(lambda x: x[1]).reset_index(name='city')
另一种解决方案:
s = df.groupby(['id','city']).size()
df = s.loc[s.groupby(level=0).idxmax()].reset_index().drop(0,axis=1)
或者:
df = df.groupby(['id'])['city'].apply(lambda x: x.value_counts().index[0]).reset_index()
print (df)
id city
0 000.tushar@gmail.com Bangalore
1 00078r@gmail.com Vijayawada
2 0007ayan@gmail.com Jamshedpur
关于python - 在对另一列进行分组后,查找列值的最大出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36174624/