如何按索引对多个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
相关产品推荐
相关产品推荐

