python - 如何使用 Pandas groupby 获取最大组数,使用字母顺序打破任何联系

标签 python pandas group-by

我有一个 Pandas 数据框,如下所示:

import pandas as pd

df = pd.DataFrame({
    'person': ['Mike', 'Mike', 'Mike', 'Bob', 'Bob', 'Bob', 'Susan', 'Cindy', 'Paul', 'Paul', 'Jon', 'Larry', 'Cindy', 'Larry', 'Larry', 'David', 'David', 'David', 'Eric', 'Cindy', 'Paul'],
    'city': ['New York', 'New York', 'New York', 'New York', 'New York', 'New York', 'New York', 'London', 'London', 'London', 'London', 'Sydney', 'Sydney', 'Sydney', 'Sydney', 'Sydney', 'Sydney', 'Sydney', 'Tokyo', 'Tokyo', 'Tokyo']
})

对于每个城市,我想返回该城市内人数最多的人。如果出现平局,我想使用此人的字母顺序(最接近“A”)。

所需的数据框如下所示:

city         person
New York     Bob
London       Paul
Sydney       David
Tokyo        Cindy

我相信我可以使用 groupby()idxmax() 来做到这一点,但我不确定如何实现。

任何帮助将不胜感激。

谢谢!

最佳答案

尝试:

df.sort_values('person')\                 #Sort to get alphabetical order
  .groupby('city', sort=False)['person']\ #Groupby city sort False to keep city in order
  .apply(pd.Series.mode)\                 #Apply mode to get most frequent occurrence
  .xs(0, level=1)                         #Use xs to get values for first level of city

输出:

city
New York      Bob
London       Paul
Tokyo       Cindy
Sydney      David
Name: person, dtype: object

并且,您可以添加 .reset_index() 来获取数据帧。

       city person
0  New York    Bob
1    London   Paul
2     Tokyo  Cindy
3    Sydney  David

关于python - 如何使用 Pandas groupby 获取最大组数,使用字母顺序打破任何联系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77056099/

相关文章:

MySQL - 在 VIEW 选择上添加 'group by' 规则

python - 如何删除与第一行一起注释掉的行?

python - 使用 CentOS 6.4 修复 Python 2.7 上的 "warning: GMP or MPIR library not found; Not building Crypto.PublickKey._fastmath"错误

python - 如何避免 VSCode 中的一行中的 python autopep8 格式化?

python - pandas DataFrame 在 bool 掩码上设置值

python - 使用 pandas 读取文件并创建 header

python - 为什么多重处理没有使用我所有的核心

python - 查找相等值组的索引python

sql - 对来自 Union 的 SQL 结果进行分组

mysql - 使用 mySQL 中的行聚合和操作将 BigInt 时间戳转换为真实日期