Python Pandas如何按资产类型分组统计持仓量并输出汇总结果
解答
完全可以仅使用Pandas原生功能实现该需求,无需引入第三方依赖。
实现步骤
- 第一步:转换字段类型
从JSON字段提取的size列默认可能为字符串格式,先转为数值类型避免求和计算出错:import pandas as pd # 转换size列为数值类型,异常值转为空值 positions['size'] = pd.to_numeric(positions['size'], errors='coerce') - 第二步:按资产分组计算持仓总规模
用groupby按资产类型分组,对size字段求和即可得到各资产总持仓:total_holdings = positions.groupby('asset')['size'].sum() - 第三步:将统计结果追加到原表末尾
构造和原表列结构对齐的统计行,通过concat拼接到原表末尾即可,统计标识放在id列,总持仓值填入size列,其余业务字段留空:
执行后得到的表末尾会自动生成你需要的统计结果:ETH总持仓为5.844,BTC总持仓为0.9549,和预期输出完全一致。# 构造待追加的统计行 stat_rows = [] for asset, total_size in total_holdings.items(): empty_row = {col: None for col in positions.columns} empty_row['id'] = f'Total {asset}:' empty_row['size'] = total_size stat_rows.append(empty_row) # 拼接得到带统计行的最终表 positions_with_stat = pd.concat( [positions, pd.DataFrame(stat_rows)], ignore_index=True )
如果不需要把统计行写入DataFrame,仅需要打印输出时在表格末尾展示统计值,直接在打印原表后循环输出统计结果即可:
print(positions) for asset, total_size in total_holdings.items(): print(f'Total {asset}: {total_size}')
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

