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

如何按索引对多个pandas DataFrame的数值进行求和

问题原因

你出现空输出的核心原因是初始化了空的pd.DataFrame()来做累加:
pandas在做算术运算时会自动按索引+列名做外对齐,空DataFrame没有可匹配的索引和列,和returns_pair.cumulative_returns这个Series相加时,所有值都会因为无法匹配变成NaN,最终输出空结构,仅保留对齐后的列名(也就是你的日期值)。
另外你的现有代码还有一个逻辑隐患:循环内每次固定取signals['column1']计算累加值,10次循环加的都是完全相同的序列,如果你是要对10个不同的收益率列求和,需要调整取列的逻辑。

解决方案

有两种常用的实现方案:

  • 方案1:初始化和待加序列索引完全对齐的全0 Series作为累加容器,避免匹配失败
  • 方案2:将所有待求和的序列拼接为同一个DataFrame后按行求和,代码更简洁,性能更高
修改后代码示例

方案1(适配你原有循环写法)

# 初始化与待加序列索引一致、初始值为0的Series
total_daily_returns = pd.Series(0, index=signals.index)

for pair in range(0, 10):
    # 若不同pair对应不同列,可修改为signals[f'column{pair+1}']
    cum_daily_return = signals['column1']
    cumulative_returns = cum_daily_return.cumsum()
    total_daily_returns += cumulative_returns

# 转为DataFrame格式(可选)
total_daily_returns = total_daily_returns.to_frame(name='total_cumulative_returns')
print(total_daily_returns)

方案2(无循环写法,更推荐)

# 先生成所有待求和的累计收益序列列表
return_list = []
for pair in range(0, 10):
    # 同样根据实际需求调整取列逻辑
    cum_daily_return = signals['column1']
    return_list.append(cum_daily_return.cumsum())

# 拼接后按行求和,自动按索引对齐
total_daily_returns = pd.concat(return_list, axis=1).sum(axis=1).to_frame(name='total_cumulative_returns')
print(total_daily_returns)

内容的提问来源于stack exchange,提问作者mr.graziani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 16:15:03