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

如何按Service Model分组为多列生成自定义describe汇总表并导出CSV

问题描述

现有数据集:

d = {'eue_scanner': [1,2,3,4,5],
     'eue_thinclient': [12,1221,2123,1231, 123],
     'service_model': ['Gold', 'Bronze', 'Bronze', 'Silver', 'Silver']}

df = pd.DataFrame(data=d)

需求:为指定列 column_for_stats = ['eue_scanner', 'eue_thinclient'] 按照 service_model 分组,生成类似单列 df['eue_thinclient'].describe().to_csv("my_description.csv") 格式的describe汇总表,包含所有分组与列的组合并导出为CSV。当前代码因存在break语句仅处理了一组一列,需要完整解决方案。

解决方案

可以利用pandas的groupby结合describe方法一次性生成所有分组和指定列的统计汇总,再导出为CSV,无需循环处理(避免break导致的不完整)。

方法1:直接生成多层索引统计结果并导出

这是最简洁的实现方式,直接覆盖所有分组与列的组合:

import pandas as pd

d = {'eue_scanner': [1,2,3,4,5],
     'eue_thinclient': [12,1221,2123,1231, 123],
     'service_model': ['Gold', 'Bronze', 'Bronze', 'Silver', 'Silver']}

df = pd.DataFrame(data=d)
column_for_stats = ['eue_scanner', 'eue_thinclient']

# 按service_model分组,对指定列生成全量describe统计
grouped_describe = df.groupby('service_model')[column_for_stats].describe()

# 导出为CSV,保留多层索引结构
grouped_describe.to_csv("grouped_description.csv")

补充:扁平化表头(可选)

如果觉得多层表头不够直观,可以将其扁平化,生成类似eue_scanner_count、eue_thinclient_mean的表头格式:

# 扁平化多层表头
grouped_describe.columns = ['_'.join(col).strip() for col in grouped_describe.columns.values]
# 重新导出
grouped_describe.to_csv("grouped_description_flat.csv")

方法2:手动遍历所有分组与列(无break)

如果需要更灵活地控制每一组每一列的处理逻辑,可以去掉break语句,遍历所有组合并汇总结果:

import pandas as pd

d = {'eue_scanner': [1,2,3,4,5],
     'eue_thinclient': [12,1221,2123,1231, 123],
     'service_model': ['Gold', 'Bronze', 'Bronze', 'Silver', 'Silver']}

df = pd.DataFrame(data=d)
column_for_stats = ['eue_scanner', 'eue_thinclient']

# 创建空DataFrame存储所有结果
all_results = pd.DataFrame()

# 遍历每个分组
for group_name, group_data in df.groupby('service_model'):
    # 遍历每个指定列
    for col in column_for_stats:
        # 生成当前列的describe结果
        desc = group_data[col].describe()
        # 添加分组和列名标识
        desc = desc.reset_index()
        desc['service_model'] = group_name
        desc['column'] = col
        # 合并到总结果
        all_results = pd.concat([all_results, desc], ignore_index=True)

# 调整列顺序并导出
all_results = all_results[['service_model', 'column', 'index', 0]]
all_results.columns = ['service_model', 'column', 'statistic', 'value']
all_results.to_csv("grouped_description_detailed.csv", index=False)

这种方式会生成每行对应一个「分组-列-统计指标」的结构,适合需要细粒度数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:05:14