You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:21:37