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

基于用户JSON参数的Python多列分组统计汇总实现需求

Python实现DataFrame多参数分组统计并生成结果文件

核心思路

  • 解析用户传入的JSON配置,提取分组列、待统计列、统计指标三类核心参数
  • 利用pandas的groupby+agg完成批量统计,支持多参数组合的遍历处理
  • 将统计结果整理为宽表格式输出到df_sum.csv
  • 同步生成统计项映射表sum_map.csv,记录每个统计结果对应的原始列和计算指标

完整代码实现

import pandas as pd
import json

def generate_statistics(df, config_json):
    # 解析配置参数:兼容字符串/字典格式的输入
    config = json.loads(config_json) if isinstance(config_json, str) else config_json
    group_cols = config.get("group_columns", [])
    metric_cols = config.get("metric_columns", [])
    agg_funcs = config.get("agg_functions", [])
    
    # 构建pandas聚合所需的字典结构
    agg_dict = {col: agg_funcs for col in metric_cols}
    
    # 执行分组统计
    grouped_result = df.groupby(group_cols).agg(agg_dict)
    
    # 整理多层列名为"原始列_统计指标"的格式
    grouped_result.columns = ['_'.join(col).strip() for col in grouped_result.columns.values]
    df_sum = grouped_result.reset_index()
    
    # 生成统计项映射表
    sum_map_records = []
    for col in metric_cols:
        for func in agg_funcs:
            sum_map_records.append({
                "statistic_item": f"{col}_{func}",
                "original_column": col,
                "agg_function": func
            })
    sum_map = pd.DataFrame(sum_map_records)
    
    # 保存结果文件(utf-8-sig编码确保中文兼容)
    df_sum.to_csv("df_sum.csv", index=False, encoding="utf-8-sig")
    sum_map.to_csv("sum_map.csv", index=False, encoding="utf-8-sig")
    
    return df_sum, sum_map

# 示例测试
if __name__ == "__main__":
    # 模拟测试数据集
    test_data = {
        "HighSchool": ["A校", "A校", "B校", "B校", "C校"],
        "Height": [175, 180, 172, 178, 169],
        "Weight": [65, 70, 62, 68, 58]
    }
    df_test = pd.DataFrame(test_data)
    
    # 用户配置参数(可直接传入字典或JSON字符串)
    user_config = {
        "group_columns": ["HighSchool"],
        "metric_columns": ["Height", "Weight"],
        "agg_functions": ["mean", "median"]
    }
    
    # 执行统计并输出结果
    result_df, map_df = generate_statistics(df_test, user_config)
    print("汇总结果表:")
    print(result_df)
    print("\n统计项映射表:")
    print(map_df)

代码说明

  1. 参数解析:自动识别配置的输入格式(字符串/字典),提取分组列、待统计列、统计指标
  2. 聚合逻辑:通过字典结构批量指定每个待统计列对应的计算指标,一次完成所有组合的统计
  3. 结果整理:将pandas默认的多层列名合并为可读性更强的"列名_指标"格式
  4. 映射表生成:遍历所有统计组合,记录每个统计项的来源和计算方式,方便后续数据溯源
  5. 文件输出:使用utf-8-sig编码避免中文乱码问题,确保结果文件的兼容性

输出文件示例

  • df_sum.csv(汇总结果表):
HighSchool,Height_mean,Height_median,Weight_mean,Weight_median
A校,177.5,177.5,67.5,67.5
B校,175.0,175.0,65.0,65.0
C校,169.0,169.0,58.0,58.0
  • sum_map.csv(统计项映射表):
statistic_item,original_column,agg_function
Height_mean,Height,mean
Height_median,Height,median
Weight_mean,Weight,mean
Weight_median,Weight,median

内容的提问来源于stack exchange,提问作者user24318

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:06:45