Pandas DataFrame每行值除以行和计算权重时出现NaN问题
问题原因
- 核心是Pandas的默认广播对齐规则导致的:你对DataFrame执行
sum(axis=1)得到的是行索引对齐的一维Series,直接用/运算符做除法时,Pandas会默认将Series的索引与DataFrame的列名做匹配,你的列名是btc、eth,和行索引(日期)完全匹配不上,所以所有位置都会填充为NaN。 - 次要问题是存在行求和结果为0的情况(如示例中2021/08/27行),直接除以0会得到
inf无穷值,不符合你预期输出0的要求。
解决方法
调用Pandas的div方法,显式指定按行维度(axis=0)对齐做除法,同时提前处理行和为0的边界情况,示例代码如下:
# 先计算每行求和结果 row_sum = trading_signals.sum(axis=1) # 将行和为0的替换为1,避免除以0的问题,保证0/1仍为0 row_sum = row_sum.replace(0, 1) # 按行对齐做除法 positions = trading_signals.div(row_sum, axis=0)
运行上述代码后得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Alexander Thomsen
相关产品推荐
相关产品推荐

