python - pandas - 在分组数据框中显示 N 个最高计数

标签 python pandas pandas-groupby pivot-table

这是我的输入数据框

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/

相关文章:

python - 从 UTC 格式的字符串转换为日期

python - 将一列交换为一行

python - 按所有类别分组,聚合函数并在 pandas 中填写生成的 NA

python-3.x - 如何比较连续行并根据条件添加列

python pandas dataframe if else 不遍历数据框

python - 为什么最后一列的数据类型是 str 而不是 float?

python - matplotlib,如何压缩x轴的部分

python - 根据另一列中的 2 行计算列行

python - 检查字典中是否存在一个项目,这是一种不好的做法吗?

python - Google BigQuery 对奇怪尝试的不完整查询回复