首页 > 解决方案 > 将两个数据框列相乘得到 NaN 列

问题描述

我一直试图简单地将两个数据框列相乘,但不明白为什么它不起作用。

这是代码

aux = self.bars['Open']
pos = self.positions
portfolio = pos * aux

这是数据

print(self.bars.tail())

                 High         Low        Open       Close      Volume   Adj Close
Date                                                                              
2019-12-24  321.519989  320.899994  321.470001  321.230011  20270000.0  321.230011
2019-12-26  322.950012  321.640015  321.649994  322.940002  30911200.0  322.940002
2019-12-27  323.799988  322.279999  323.739990  322.859985  42528800.0  322.859985
2019-12-30  323.100006  320.549988  322.950012  321.079987  49729100.0  321.079987
2019-12-31  322.130005  320.149994  320.529999  321.859985  57077300.0  321.859985



print(pos.tail())

              SPY
Date             
2019-12-24 -100.0
2019-12-26 -100.0
2019-12-27 -100.0
2019-12-30  100.0
2019-12-31 -100.0

它打印的内容:

print(portfolio.tail())

            2019-01-02 00:00:00  2019-01-03 00:00:00  ...  2019-12-31 00:00:00  SPY
Date                                                  ...                          
2019-12-24                  NaN                  NaN  ...                  NaN  NaN
2019-12-26                  NaN                  NaN  ...                  NaN  NaN
2019-12-27                  NaN                  NaN  ...                  NaN  NaN
2019-12-30                  NaN                  NaN  ...                  NaN  NaN
2019-12-31                  NaN                  NaN  ...                  NaN  NaN

我想看到的:

              PosUSD
Date             
2019-12-24 -32147.0001
2019-12-26 -32164.9994
2019-12-27 -32373.9990
2019-12-30  32295.0012
2019-12-31 -32052.9999

如果也尝试过使用该.mul功能并给出相同的结果。

标签: pythonpandasnumpydataframe

解决方案


用于DataFrame.mulaxis=0列(系列)的多个:

#[[]] is for one column DataFrame
portfolio = aux[['SPY']].mul(bars['Open'], axis=0)
print (portfolio)
                   SPY
Date                  
2019-12-24 -32147.0001
2019-12-26 -32164.9994
2019-12-27 -32373.9990
2019-12-30  32295.0012
2019-12-31 -32052.9999
2019-12-31 -32185.9985  

如果想要多列一列:

portfolio = bars.mul(aux['SPY'], axis=0)
print (portfolio)
                  High         Low        Open       Close        Volume  \
Date                                                                       
2019-12-24 -32151.9989 -32089.9994 -32147.0001 -32123.0011 -2.027000e+09   
2019-12-26 -32295.0012 -32164.0015 -32164.9994 -32294.0002 -3.091120e+09   
2019-12-27 -32379.9988 -32227.9999 -32373.9990 -32285.9985 -4.252880e+09   
2019-12-30  32310.0006  32054.9988  32295.0012  32107.9987  4.972910e+09   
2019-12-31 -32213.0005 -32014.9994 -32052.9999 -32185.9985 -5.707730e+09   

             Adj Close  
Date                    
2019-12-24 -32123.0011  
2019-12-26 -32294.0002  
2019-12-27 -32285.9985  
2019-12-30  32107.9987  
2019-12-31 -32185.9985  

推荐阅读