如何用Pythonic方法按列最大值重新分组Pandas DataFrame并关联原表
问题解决方法
错误原因
你之前的操作错误在于分组层级选择错误,需要按第一级索引category(level=0)分组,而非第二级的unit_quantity(level=1)。
可行解法
解法1:直接基于多级索引操作
步骤代码如下:
# 1. 按category分组,取Count列最大值对应的索引 max_idx = grouped['Count'].groupby(level=0).idxmax() # 2. 构造 category 到最高频unit_quantity的映射字典 category_uq_map = {cat: uq for cat, uq in max_idx} # 3. 映射索引新增目标列 grouped['Most Frequent unit_quantity'] = grouped.index.get_level_values(0).map(category_uq_map)
解法2:重置索引后合并(可读性更高)
如果不适应多级索引操作,可以转为普通列处理:
# 1. 把多级索引转为普通列 grouped_normal = grouped.reset_index() # 2. 计算每个category对应的最高频unit_quantity max_uq_df = grouped_normal.groupby('category').apply( lambda x: x.loc[x['Count'].argmax(), 'unit_quantity'] ).reset_index(name='Most Frequent unit_quantity') # 3. 合并回原表 final_df = grouped_normal.merge(max_uq_df, on='category', how='left') # 如需恢复多级索引可执行:final_df = final_df.set_index(['category', 'unit_quantity'])
结果验证
按你提供的示例数据,最终输出符合预期:
- banana分组所有行的新增列取值为
1EA - eggs分组所有行的新增列取值为
100G - full cream milk分组所有行的新增列取值为
1L
内容的提问来源于stack exchange,提问作者ℂybernetician
相关产品推荐
相关产品推荐

