python - 在对另一列进行分组后,查找列值的最大出现次数

标签 python pandas group-by max aggregate

我有一个 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 对于两个或三个城市具有相同的计数,我可以返回任何这些城市。

最佳答案

您可以尝试将 groupbysize 结合使用和 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/

相关文章:

python - PayPal REST 实时问题

python - 了解 scipy.stats.norm.rvs()?

python - 对于相同的操作数,按位左移不同的结果

python - 根据不同的行和列拆分行

Python分组和拼接: splicing the result returned from itertools. groupby

python - 如何在循环中打印列表中的不同值?

python - 将一年与数据值分开;照顾闰年

python - 为什么 DataFrame.loc[[1]] 比 df.ix [[1]] 慢 1,800 倍,比 df.loc[1] 慢 3,500 倍?

c# - 将列表分组为每组 X 项的组

mysql 以 double 显示结果总和