Умножение строк в кадре данных (pandas) на серию - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть этот фрейм финансовых данных, извлеченных с yfinance. Я пытаюсь умножить дневную цену каждой акции на вектор позиций, отражающий количество акций, находящихся в портфеле (57 акций EDP.LS, 2 акции DIS, ни одна из остальных). Код, который я использую, приведен ниже, но все, что я получаю, - это массив данных с размером NaN, размером с исходные строки df + 4 с индексами «0, 1, 2, 3» с большим количеством 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 ]

1 голос
/ 18 апреля 2020

Мы должны вставить тикер с индексом вашей мультисервисности

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

Тогда мы можем сделать несколько

firstValues = df.mul(firstPositions, axis=1)
1 голос
/ 18 апреля 2020

Если вы хотите умножить каждый столбец, используйте axis = 1, это должно решить.

0 голосов
/ 18 апреля 2020
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...