我一直试图简单地将两个数据框列相乘,但无法理解为什么它不起作用。
这是代码:
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
函数并给出相同的结果。
答案 0 :(得分:2)
将DataFrame.mul
与axis=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
答案 1 :(得分:2)
您需要.to_numpy()
,因为列名与要乘的列名不同:
bars.mul(pos.to_numpy())
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
答案 2 :(得分:2)
使用Series.mul
。您可以使用Series.to_frame
来获得DataFrame
aux.mul(pos['SPY']).to_frame('PosUSD')
# 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