将数据框(熊猫)中的行乘以一系列

时间:2020-04-18 15:00:55

标签: python pandas dataframe

我用yfinance提取了此财务数据数据框。我正在尝试将每只股票的每日价格乘以反映该投资组合所持股票数量的头寸向量(57个EDP.LS股票,2个DIS股票,其他都没有)。我正在使用的代码如下,但是我得到的是NaN的数据帧,其大小为原始df +索引为“ 0、1、2、3”的4行以及更多NaN的大小。我在做什么错了?

from datetime import date
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

tickers = ['EDP.LS', 'DIS', 'GILD', 'FB'] #yahoo finance tickers
firstPositions = pd.Series([57, 2, 0, 0]) #order follows tickers list
today = date.today()
df = yf.download(tickers, start='2020-02-07', end=today)['Close']
firstValues = df.mul(firstPositions, axis=0)

提前谢谢

3 个答案:

答案 0 :(得分:1)

如果您想将每一列乘以axis = 1,那应该可以解决。

答案 1 :(得分:1)

我们应该在股票代码中插入您的索引

tickers = ['EDP.LS', 'DIS', 'GILD', 'FB'] #yahoo finance tickers
firstPositions = pd.Series([57, 2, 0, 0],index= tickers)  

然后我们可以做多个

firstValues = df.mul(firstPositions, axis=1)

答案 2 :(得分:0)

tickers = ['EDP.LS', 'DIS', 'GILD', 'FB'] 

start_date = 'Your Start Date'
end_date = 'Your End Date'

exchange = 'yahoo'
column_name = 'Adj Close' # 'Open' 'High' 'Low' 'Close' 'Adj Close' 'Volume' #Your Columns


allData = pd.DataFrame()
finalTickers = []
for ticker in tickers:
    try:

        allData = pd.merge(allData, pd.DataFrame(pdr.get_data_yahoo(ticker, fields='price', 
                           start=start_date, end=end_date)['Adj Close']), 
                           right_index=True, left_index=True, how='outer')

        # Appends tickers which have data
        finalTickers.append(ticker)

    except: 
        next 

allData.columns = finalTickers
allData = allData.dropna(axis='columns')
allData

然后:

s = allData.mul(firstPositions_as_dataframe, axis=1)