首页 > 解决方案 > Python:如何仅显示按国家/地区划分的运动员人数最多的运动?

问题描述

我需要为“国家”列中的每个值找到运动员人数最多的运动。我的数据框有列“国家”、“运动”、“名称”。

尝试使用 .groupby 方法,但无法弄清楚

试过 df.groupby('country', 'sport').count() 这给了我按国家分组的每项运动的运动员人数,但我不知道如何从这里找到每个国家最大的运动。

任何帮助都会很棒:)

标签: pythonpandasdataframegrouping

解决方案


你的代码:

df.groupby('country', 'sport').count()

相当于:

df.value_counts(['country', 'sport'])

因此,从这里,您可以按“国家”对输出进行分组并获取每个组的第一行,因为默认情况下数据已经按降序排序:

正如评论中所建议的,您必须设置一个MRE才能获得帮助*

# For example
import pandas as pd
import numpy as np
import string

countries = ['France', 'Spain', 'Italy']
sports = ['Football', 'Tennis', 'Basketball']
names = list(string.ascii_uppercase)
N = len(names)

df = pd.DataFrame({'country': np.random.choice(countries, N+1),
                   'sport': np.random.choice(sports, N+1), 
                   'name': names})
>>> df.value_counts(['country', 'sport']).groupby('country').head(1)
country  sport     
France   Football      5
Italy    Basketball    4
Spain    Tennis        3
dtype: int64

*如果您已经有一些数据要共享,更简单的 MRE 是复制/粘贴print(df.head(20).to_string(index=False))样本是否相关的输出。有了这样的输出,我们就可以pd.read_clipboard()在 DataFrame 中加载数据。


推荐阅读