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

如何基于策略间交易为每个策略新增列并累计金额?

实现Pandas策略实时累计金额的方法

直接上解决方案,核心是把每笔交易拆成转出、转入两条记录,再通过分组累计和宽表转换来实现:

步骤拆解

  • 把每一行交易拆成两条记录:转出策略对应负金额,转入策略对应正金额
  • 保留原表的行索引,方便后续对齐
  • 按策略分组计算累计金额
  • 转成宽格式后和原表合并,得到每个策略的实时累计值

完整代码

import pandas as pd

# 原始数据集
df = pd.DataFrame({"value": [1000, 4000, 2000, 3000],
                   "out": ["cash", "cash", "lending", "DCA"],
                   "in": ["DCA", "lending", "cash", "lending"]})

# 1. 拆分转出、转入记录
out_entries = df.assign(strategy=df['out'], amount=-df['value'])[['strategy', 'amount']]
in_entries = df.assign(strategy=df['in'], amount=df['value'])[['strategy', 'amount']]

# 2. 合并记录并保留原行索引
all_entries = pd.concat([out_entries, in_entries], keys=df.index).reset_index(level=0)

# 3. 按策略计算累计金额
all_entries['cumulative'] = all_entries.groupby('strategy')['amount'].cumsum()

# 4. 转宽格式并填充缺失值(初始为0)
cumulative_table = all_entries.pivot(index='level_0', columns='strategy', values='cumulative').fillna(0)

# 5. 和原表合并得到最终结果
final_df = pd.concat([df, cumulative_table], axis=1)
print(final_df)

运行结果

value      out       in   cash  lending    DCA
0   1000     cash      DCA -1000.0     0.0  1000.0
1   4000     cash  lending -5000.0  4000.0  1000.0
2   2000  lending     cash -3000.0  2000.0  1000.0
3   3000      DCA  lending -3000.0  5000.0 -2000.0

优势说明

  • 全程用Pandas向量化操作,比逐行循环效率高,适合处理大规模数据
  • 自动识别所有策略类型,不用手动指定列名,新增策略时无需修改代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:20:34