2016-06-18 1 views
1

У меня есть df с ежедневным «Adj Close» (из Yahoo) для многих акций, которые я хочу нарисовать по сравнению с SPY.Pandas: диаграмма 3 месяца цитат с эталоном

  AAPL  ABC ... SPY 
Date 
2016-03-10 100.56 85.79  198.52 
2016-03-11 101.64 89.14  201.72 
...   
2016-06-09 99.65 76.17  212.08 
2016-06-10 98.83 76.46  210.07 

Я хочу наметить последние 3 месяца для каждого запаса, за исключением SPY (эталон). Каждый график должен сравнивать цены на акцию с ценами на SPY.

Это означает, что, например, для построения графиков AAPL, тест SPY_AAPL должен быть рассчитан как:

SPY_AAPL = df['SPY']/198.52 * 100.56 

... так что первая точка AAPL парит над понятием «SPY_AAPL». Контуров других акций требуют аналогичных расчетов ...

SPY_ABC = df['SPY']/198.52 * 85.79 

Я не уверен, что вспомогательные колонны (SPY_AAPL, SPT_ABC ...) должны быть добавлены к ФРУ. Перпапы можно рассчитывать «на лету».

«семьи карт» может быть, возможно, в «для цикла»

for x in df.columns: # how to remove the SPY here? 
    df[x].tail(66).plot() # 66 is approx 3 months 
    # SPY_XXX.tail(66).plot() # here the benchmark 
    plt.show() 

Любая помощь высоко ценится.

ответ

2

Вы ищете что-то вдоль этих линий - (делит все цены на первой строке):

stockData = DataReader(['AAPL', 'AMZN', 'FB', 'SPY'], 'yahoo', datetime(2015, 1, 1), datetime.today()).loc['Adj Close'] 
stockData = stockData.div(stockData.iloc[0], axis=1) 
for stock in stockData.columns[:-1]: 
    stockData.loc[:, [stock, 'SPY']].plot() 
    plt.show() 

enter image description here

Смежные вопросы