为什么pandas的groupby结果不显示内容?如何按分组出现次数排序?
问题原因
直接调用df.groupby()仅会生成DataFrameGroupBy中间对象,该对象仅存储分组映射逻辑,未执行任何聚合计算,因此直接打印只会输出对象的内存地址,不会展示分组汇总结果。
实现方案
1. 查看分组汇总结果
如果需要查看每个分组的统计汇总,可调用agg方法指定聚合规则,示例如下:
# 按Animal分组,统计每组的出现次数、最大速度、平均速度 group_summary = df.groupby('Animal').agg( 出现次数=('Animal', 'count'), 最高速度=('Max Speed', 'max'), 平均速度=('Max Speed', 'mean') ) display(group_summary)
运行后即可得到分组汇总表格。
2. 按分组出现次数对原DataFrame排序
有两种常用实现方式:
方式1:通过transform生成分组计数列排序
# 给每行新增对应Animal分组的出现次数字段 df['group_count'] = df.groupby('Animal')['Animal'].transform('count') # 按计数字段降序排序,不需要计数可后续删除该列 sorted_df = df.sort_values('group_count', ascending=False).drop('group_count', axis=1) display(sorted_df)
方式2:通过计数映射直接排序
# 先生成每个Animal对应的出现次数字典 count_map = df['Animal'].value_counts().to_dict() # 排序时通过映射字典取对应次数作为排序依据 sorted_df = df.sort_values(by='Animal', key=lambda x: x.map(count_map), ascending=False) display(sorted_df)
两种方式都可以实现需求:出现次数最多的大象行排在最前,其次是出现2次的猎鹰、鹦鹉行。如果次数相同时需要自定义排序规则,可在sort_values中增加第二个排序字段调整。
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

