这是我的输入数据框
df = pd.DataFrame([
['CA', 'LAX', 'Alice'],
['NY', 'NYC', 'Alice'],
['TX', 'HOU', 'Alice'],
['CA', 'SFO', 'Bob'],
['NY', 'NYC', 'Bob'],
['TX', 'AUS', 'Bob'],
['CA', 'LAX', 'Carol'],
['NY', 'ALB', 'Carol'],
['TX', 'HOU', 'Carol'],
['CA', 'LAX', 'Dan'],
['NY', 'NYC', 'Dan'],
['TX', 'DAL', 'Dan'],
['CA', 'SFO', 'Eve'],
['NY', 'NYC', 'Eve'],
['TX', 'AUS', 'Eve'],
['CA', 'SDO', 'Frank'],
['NY', 'NYC', 'Frank'],
['TX', 'HOU', 'Frank']],
columns=['State','City','Person'])
这是我希望得到的输出:
State City Count
CA LAX 3
SFO 2
NY ALB 1
NYC 5
TX HOU 3
AUS 2
基本上,我想显示每个州人口数量最多的前 2 个城市。
我试过使用这个 groupby 语句:
df.groupby(['State','City'])['Person'].count()
生成以下输出
State City
CA LAX 3
SDO 1
SFO 2
NY ALB 1
NYC 5
TX AUS 2
DAL 1
HOU 3
但我无法提出可以对上述计数进行排序并选择最高的两个计数的语句。非常感谢您的帮助!
最佳答案
我认为你可以简化方法。
您可以使用 groupby.value_counts()
而不是 count()
来获取当前位置,然后链接另一个 groupby().head (2)
获取每个州的前 2 个城市。
原因是value_counts()
结果对象将按降序
顺序排列,因此第一个元素是最常出现的元素,因此您可以按原样使用head(2)
。
df.groupby('State')['City'].value_counts().groupby('State').head(2)
State City
CA LAX 3
SFO 2
NY NYC 5
ALB 1
TX HOU 3
AUS 2
Name: City, dtype: int64
关于python - pandas - 在分组数据框中显示 N 个最高计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70462533/