使用 Pandas 数据框聚合后无法对值进行排序

Posted

技术标签:

【中文标题】使用 Pandas 数据框聚合后无法对值进行排序【英文标题】:Can't sort values after aggregation using Pandas dataframe 【发布时间】:2021-01-04 06:51:07 【问题描述】:

我有以下数据框:

df[['ID','Team']].groupby(['Team']).agg([('total','count')]).reset_index("total").sort_values("count")

我基本上,需要按团队计算ID的数量,然后按ID的总数排序。

聚合部分很好,它给了我预期的结果。但是当我尝试排序部分时,我得到了这个:

KeyError: 'Requested level (total) does not match index name (Team)'

我做错了什么?

【问题讨论】:

试试这个 df[['ID','Team']].groupby(['Team']).agg([('total','count')]).reset_index() .sort_values("count") 【参考方案1】:

使用名称聚合在聚合函数中指定新列名称,从DataFrame.reset_index 中删除total

df = pd.DataFrame(
        'ID':list('abcdef'),
        'Team':list('aaabcb')
)

df = df.groupby('Team').agg(count=('ID','count')).reset_index().sort_values("count") 
print (df)
  Team  count
2    c      1
1    b      2
0    a      3

您的解决方案应该通过在groupby 之后指定列进行更改,然后在元组中使用聚合函数指定新列名,最后还要从reset_index 中删除total

df = df.groupby('Team')['ID'].agg([('count','count')]).reset_index().sort_values("count")
print (df)
  Team  count
2    c      1
1    b      2
0    a      3

【讨论】:

以上是关于使用 Pandas 数据框聚合后无法对值进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Pandas pivot_table,按列对值进行排序

重构pyspark数据框

旋转包含字符串的 Pandas 数据框 - “没有要聚合的数字类型”错误

通过对不同列使用不同聚合的 pandas 数据框进行分组

Pandas 按组聚合和列排序

熊猫数据框中的行排序和聚合