如何基于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.
相关产品推荐
相关产品推荐

