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

如何用Pandas按Release列分组并生成自定义汇总格式?

DataFrame分组求和并自定义格式展示解决方案

需求

对给定的DataFrame按Release列分组,对Pass和Fail列的值求和,并以[Pass: 总和, Fail: 总和]的自定义格式展示结果。

原始DataFrame

ReleasePassFailTotal
release_a102030
release_a54550
release_a52328
release_a206787
release_a871198
release_b257
release_b104555
release_b643397
release_c31518
release_c10489193
release_c9887185

期望输出(注:原期望中release_a数值有误,已修正)

ReleaseSummary
release_a[Pass: 127, Fail: 166]
release_b[Pass: 76, Fail: 83]
release_c[Pass: 205, Fail: 191]

错误代码分析

  • 第一段代码df.groupby(['Release Name'],as_index=False).agg({'Pass': lambda x: x.to_numpy().tolist()}):仅将分组后的Pass值转为列表,未执行求和操作,不符合需求。
  • 第二段代码df['Release Name'].map(df.value_counts('Pass')):value_counts是统计Pass值的出现频次,并非分组求和,逻辑完全错误。

正确解决方案代码

import pandas as pd

# 构造原始DataFrame
data = {
    'Release': ['release_a']*5 + ['release_b']*3 + ['release_c']*3,
    'Pass': [10,5,5,20,87,2,10,64,3,104,98],
    'Fail': [20,45,23,67,11,5,45,33,15,89,87],
    'Total': [30,50,28,87,98,7,55,97,18,193,185]
}
df = pd.DataFrame(data)

# 按Release分组,对Pass和Fail列求和
grouped_sum = df.groupby('Release', as_index=False)[['Pass', 'Fail']].sum()

# 生成自定义格式的Summary列
grouped_sum['Summary'] = grouped_sum.apply(
    lambda row: f"[Pass: {row['Pass']}, Fail: {row['Fail']}]",
    axis=1
)

# 保留需要的列并输出
final_df = grouped_sum[['Release', 'Summary']]
print(final_df)

执行后输出:

Release                    Summary
0  release_a  [Pass: 127, Fail: 166]
1  release_b    [Pass: 76, Fail: 83]
2  release_c  [Pass: 205, Fail: 191]

代码说明

  1. 分组求和:通过groupby('Release')按版本分组,指定['Pass', 'Fail']列后调用sum(),直接得到每个版本的两列总和,as_index=False确保Release作为普通列保留。
  2. 构造自定义格式:使用apply逐行处理分组后的DataFrame,通过字符串格式化将Pass和Fail的数值拼接成需求指定的格式。
  3. 整理输出:筛选出Release和Summary两列,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:36:07