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

如何基于Pandas DataFrame生成指定结构的带分类汇总标题的投资组合报表

可行实现方案

直接使用Pandas原生的groupby迭代逻辑即可实现需求,无需冗余的手动数据拆分操作,完整可运行代码如下:

import pandas as pd

# 示例数据初始化
data = {'category':['stock', 'bond', 'cash', 'stock','cash'],
        'name':['AA' , 'BB',  'CC',  'DD', 'EE'],
        'quantity':[2,  2,  10,  4, 3],
        'price':[10, 15, 4, 2, 4],
        'value':[ 20, 30, 40,8, 12]}
df = pd.DataFrame(data)

report_parts = []
# 可自定义明细展示的字段
display_cols = ['name', 'quantity', 'price', 'value']

# 按category分组迭代,sort=False保留原始数据中类别的出现顺序,不需要可删除
for category, group in df.groupby('category', sort=False):
    # 计算分组总价值
    group_total = group['value'].sum()
    # 写入分组标题行
    report_parts.append(f"类别:{category} | 组内总价值:{group_total}")
    # 写入明细表头
    report_parts.append('\t'.join(display_cols))
    # 写入明细行
    for _, row in group[display_cols].iterrows():
        report_parts.append('\t'.join(map(str, row)))
    # 不同分组之间插入空行分隔
    report_parts.append('')

# 拼接为最终报表内容,去除末尾多余空行
final_report = '\n'.join(report_parts).rstrip('\n')

# 打印预览效果
print(final_report)

# 如需导出到文本文件,取消注释下方代码即可
# with open('投资组合报表.txt', 'w', encoding='utf-8') as f:
#     f.write(final_report)

运行输出效果示例

类别:stock | 组内总价值:28
name	quantity	price	value
AA	2	10	20
DD	4	2	8

类别:bond | 组内总价值:30
name	quantity	price	value
BB	2	15	30

类别:cash | 组内总价值:52
name	quantity	price	value
CC	10	4	40
EE	3	4	12

方案说明

  • 整体逻辑清晰,仅需要遍历分组、处理每个分组的标题和明细两步核心操作
  • 用列表收集报表片段最后统一拼接,相比逐次字符串拼接性能更好,适合数据量较大的场景
  • 可灵活调整:修改display_cols就能自定义明细展示字段,修改分隔符\t为空格或其他字符即可调整排版,修改分组标题的f字符串格式就能调整表头展示样式

内容的提问来源于stack exchange,提问作者Stephane W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:57:00