【问题标题】:Add columns dataframe python plus Multiplication by a number from an array添加列数据框python加上乘以数组中的数字
【发布时间】:2017-03-19 18:05:49
【问题描述】:

如何将数组与数据帧的列相乘,然后将这些列与数据帧中的新列相加?

我用下面的代码试了一下,但不知何故得到了错误的数字:

                  AAPL  Portfolio         ACN
Date                                           
2017-01-03  116.150002  1860.880008  116.459999
2017-01-04  116.019997  1862.079960  116.739998
2017-01-05  116.610001  1852.799992  114.989998
2017-01-06  117.910004  1873.680056  116.300003
...

它应该如下所示:

                  AAPL  Portfolio         ACN
Date                                          
2017-01-03  116.150002  1046.900003 116.459999
2017-01-04  116.019997  1047.779978 116.739998
2017-01-05  116.610001  1041.389994 114.989998
2017-01-06  117.910004  1053.140031 116.300003
...

代码如下所示。可能是我想的太复杂了,所以代码没有意义:

import pandas_datareader.data as pdr
import pandas as pd
import datetime

start = datetime.datetime(2017, 1, 1)
end = datetime.datetime(2017, 3, 17)

ticker_list = ["AAPL","ACN"]
position_size = [4,5]

for i in range(0,len(ticker_list)):
    #print(i)
    DataInitial = pdr.DataReader(ticker_list[i], 'yahoo', start, end)
    ClosingPrices[ticker_list[i]] = DataInitial[['Close']]
    ClosingPrices['Portfolio'] = ClosingPrices['Portfolio'] + ClosingPrices[ticker_list[i]]*position_size[i] 
print(ClosingPrices)

其实我想要的是:

2017-01-03: 116.150002*4+116.150002*5
2017-01-03: 116.019997*4+116.739998*5

等等……

【问题讨论】:

  • 你有什么问题?
  • @DYZ,如上所述,我想将头寸乘以专用价格,然后将每天的列加在一起。是不是更清楚了?
  • 这仍然不是问题。 SO 是一个问答网站。除非你问一个明确的问题,否则你不会得到答案。
  • @DYZ,我更改了上面的描述,希望现在更清楚?

标签: python arrays pandas dataframe


【解决方案1】:

如果需要:

2017-01-03: 116.150002*4+116.150002*5
2017-01-03: 116.019997*4+116.739998*5

然后使用来自dict 的多个列的concat 和最后一个sum 所有列一起:

ticker_list = ["AAPL","ACN"]
position_size = [4,5]
d = dict(zip(ticker_list,position_size))

print (pd.concat([ClosingPrices[col] * d[col] for col in ticker_list], axis=1))
                  AAPL         ACN
Date                              
2017-01-03  400.000000  500.000000
2017-01-04  464.079988  583.699990
2017-01-05  466.440004  574.949990
2017-01-06  471.640016  581.500015

ClosingPrices['Portfolio'] = pd.concat([ClosingPrices[col] * d[col] for col in ticker_list], 
                                        axis=1).sum(axis=1)
print (ClosingPrices)
                  AAPL    Portfolio         ACN
Date                                           
2017-01-03  100.000000   900.000000  100.000000 <-for testing values was changed to 100
2017-01-04  116.019997  1047.779978  116.739998
2017-01-05  116.610001  1041.389994  114.989998
2017-01-06  117.910004  1053.140031  116.300003

【讨论】:

  • 非常感谢,这正是我想要的。
猜你喜欢
  • 2017-02-23
  • 2021-01-11
  • 2014-07-22
  • 1970-01-01
  • 2011-12-25
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多