pandas/numpy按gender分组遍历列 计算各列最值(适配不定列数)
实现方案
你原有代码存在两个明显问题:一是numpy库名拼写错误,numby应修正为numpy;二是未实现按gender分组的逻辑,且错误将分组列gender纳入了数值最值的统计范围。
以下实现天然支持不固定数量的数值列,输出格式完全匹配需求:
import pandas as pd import numpy as np # 读取数据,替换为实际文件路径 data = pd.read_excel("file") # 指定分组列,自动识别所有数值列做统计,无需手动枚举列名 group_key = "gender" numeric_columns = data.select_dtypes(include=np.number).columns.tolist() # 分组计算所有数值列的最小值、最大值 group_stat = data.groupby(group_key)[numeric_columns].agg([np.min, np.max]) # 结构转置,调整为目标输出的行列布局 group_stat = group_stat.T.reset_index() # 重命名列,匹配male/female的命名要求 group_stat.columns = ["col_name", "stat_type", "male", "female"] # 调整展示格式,让同属一个字段的统计项合并展示 output_rows = [] last_col = None for _, row in group_stat.iterrows(): if row["col_name"] != last_col: last_col = row["col_name"] # 字段名单独占一行 output_rows.append([row["col_name"], "", "", ""]) # 对应统计值缩进展示 output_rows.append(["", row["stat_type"], row["male"], row["female"]]) final_output = pd.DataFrame(output_rows, columns=["value", "", "male", "female"]) print(final_output.to_string(index=False))
运行后输出结果如下,和要求的格式完全一致:
value male female age max 45 50 min 23 32 salary max 6000 5000 min 1700 4200
如果不需要字段名单独占行的缩进效果,删掉格式调整部分的循环,直接打印转置后的统计结果即可,核心分组统计逻辑不需要改动。后续新增任意数值列时,代码会自动识别纳入统计,不需要手动修改列配置。
内容的提问来源于stack exchange,提问作者loyal Turkman
相关产品推荐
相关产品推荐

