如何从pandas的groupby.size()结果中获取所有最大最小值及对应数据
解决方法
你可以先将分组计数结果转为带普通列的DataFrame,再按计数值做布尔筛选,就能拿到所有符合最大值/最小值条件的条目:
完整实现代码
import pandas as pd # 原始DataFrame df = pd.DataFrame({ 'col1' : ['MM1', 'MM1', 'MM1', 'MM2', 'MM2', 'MM2', 'MM4', 'MM4', 'MM4'], 'col2' : ['S1', 'S1', 'S3', 'S3', 'S4', 'S4', 'S2', 'S2', 'S2'], 'col3' : [1,1,2,3,4,3,2,2,4] }) # 1. 计算分组计数,将多级索引转为普通列,计数结果命名为count列 count_df = df.groupby(["col1", "col3"]).size().reset_index(name='count') # 2. 筛选所有计数为最大值的条目 max_count_rows = count_df[count_df['count'] == count_df['count'].max()] # 3. 筛选所有计数为最小值的条目 min_count_rows = count_df[count_df['count'] == count_df['count'].min()]
结果说明
- 你可以直接从
max_count_rows、min_count_rows中提取col1、col3列,得到对应分组的字段值 - 如果你习惯使用分组计数的Series格式,也可以用如下方式直接筛选,不需要转DataFrame:
count_series = df.groupby(["col1", "col3"]).size() # 筛选所有最大值对应的条目 max_count_series = count_series[count_series == count_series.max()] # 得到的索引即为对应col1、col3的元组列表 max_groups = max_count_series.index.tolist()
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

