获取DataFrame中按分类变量D分组后各列的最大最小值
你原有代码的问题有两点:
- 你传入agg的
dfObj.min(axis=0)是对全表计算最小值,不是分组后的组内统计值 - 仅配置了X列的聚合规则,没有覆盖Y、Z列,也没有处理聚合后生成的多级列名
你可以直接用pandas的命名聚合特性实现需求,一步得到符合你要求的列名格式:
min_max_df = dfObj.groupby('D', as_index=False).agg( Xmin=('X', 'min'), Xmax=('X', 'max'), Ymin=('Y', 'min'), Ymax=('Y', 'max'), Zmin=('Z', 'min'), Zmax=('Z', 'max') )
如果需要统计的数值列数量较多,也可以用批量生成聚合规则的写法:
# 需要统计的数值列列表 num_cols = ['X', 'Y', 'Z'] # 生成聚合规则 agg_config = {col: ['min', 'max'] for col in num_cols} # 分组聚合 temp = dfObj.groupby('D', as_index=False).agg(agg_config) # 拼接多级列名得到最终列名 temp.columns = [col[0] + col[1].capitalize() if col[1] else col[0] for col in temp.columns] min_max_df = temp
两种写法输出的结果都和你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者IronMaiden
相关产品推荐
相关产品推荐

