Python Pandas中GroupBy聚合后按指定列排序的实现方法
在Pandas中实现GroupBy聚合后的排序(等效SQL的ORDER BY)
其实这个需求和SQL里GROUP BY后接ORDER BY的逻辑完全对应——先完成分组聚合得到统计结果,再对结果集按指定列排序就行,我给你一步步拆解清楚:
步骤1:先完成GroupBy聚合
假设你的原始DataFrame是df,需要按公司/机构名称分组,统计数量得到Company or Agency count.列。用agg()方法可以明确指定统计规则,尤其是你的列名带空格和点,用这种写法更稳妥:
# 分组并聚合生成统计列 aggregated_result = df.groupby("Company or Agency Name").agg( **{"Company or Agency count.": ("Target_Column", "count")} )
把这里的Target_Column替换成你实际要统计行数的列(比如ID列,确保该列无空值),**语法是用来生成带特殊字符的列名的小技巧。
步骤2:对聚合结果排序
直接用sort_values()方法按目标列排序,和SQL的ORDER BY完全等效:
# 按count列降序排序(对应SQL的ORDER BY ... DESC) sorted_result = aggregated_result.sort_values( by="Company or Agency count.", ascending=False )
如果需要升序排列,把ascending改成True即可(默认就是升序,可省略该参数)。
更简洁的链式写法
你也可以把聚合和排序合并成一行代码,写起来更高效:
sorted_result = df.groupby("Company or Agency Name").agg( **{"Company or Agency count.": ("Target_Column", "count")} ).sort_values(by="Company or Agency count.", ascending=False)
额外提示
如果你已经拿到了聚合后的DataFrame(比如从其他查询结果得到的),直接跳过聚合步骤,对现成的结果调用sort_values()就好:
# 假设你已有带count列的aggregated_df sorted_df = aggregated_df.sort_values(by="Company or Agency count.", ascending=False)
内容的提问来源于stack exchange,提问作者Rhubarb
相关产品推荐
相关产品推荐

