簡體   English   中英

Pandaify - Pythonify (Max Observation , Last Observation) 計算

[英]Pandaify - Pythonify (Max Observation , Last Observation) Calculation

我有一個可以解決的簡單問題,但我認為我的解決方案不符合標准。 它很亂。 我想以此作為簡化計算的學習機會。

這是設置。

import pandas as pd
import numpy as np
import datetime
from dateutil.relativedelta import relativedelta
import pandas_datareader.data as web   

start = datetime.date.today() - relativedelta(years=1)
end = datetime.date.today()

main = ['MSFT','AAPL','FB','AMZN','NVDA','MA','V','ADBE','LULU','CRM','CRWD']

df = web.DataReader(main, 'yahoo', start, end)
idx = pd.IndexSlice
df.loc[idx[datetime.datetime(2020,1,1):],idx['Adj Close',['MSFT','CRWD']]].head(5)

DataFrame df 是從 Pandas DataReader 模塊返回的股票行情列表的股票市場數據。

在此處輸入圖片說明

我試圖找到最高股價與最后收盤價的百分比差異。

我使用下面的計算,這是我需要簡化的代碼。

(
    pd.concat( 
        [
         df.loc[idx[datetime.datetime(2020,1,1):],idx['Adj Close',:]].max().unstack().transpose().reset_index().set_index('Symbols').rename(columns={'Adj Close':'Max Close'}),   
         df.loc[idx[datetime.datetime(2020,1,1):],idx['Adj Close',:]].tail(1).stack().reset_index()[['Symbols','Adj Close']].set_index('Symbols').rename(columns={'Adj Close':'Last Close'}),
        (
          (
              (
                df.loc[idx[datetime.datetime(2020,1,1):],idx['Adj Close',:]].max().unstack().transpose().reset_index().set_index('Symbols')
                - df.loc[idx[datetime.datetime(2020,1,1):],idx['Adj Close',:]].tail(1).stack().reset_index()[['Symbols','Adj Close']].set_index('Symbols')
              )
                /
             df.loc[idx[datetime.datetime(2020,1,1):],idx['Adj Close',:]].tail(1).stack().reset_index()[['Symbols','Adj Close']].set_index('Symbols'))*100
        ).rename(columns={'Adj Close':'Percentage Diff'})
        ],
        axis='columns'
        )
        .sort_values(by='Percentage Diff', ascending=False)    
)

這是我的結果。

在此處輸入圖片說明

關於什么:

df = df.sort_index()['Adj Close']
pdiff = 100*(df.max() - df.iloc[-1,:])/df.iloc[-1,:]

它返回:

Symbols
MSFT     7.339788
AAPL    14.713167
FB      14.921531
AMZN     7.448315
NVDA     4.241517
MA       3.775402
V        4.761903
ADBE     6.300777
LULU    14.959885
CRM      5.741029
CRWD     1.086576
dtype: float64

如果您希望保留輸出,請先創建列並記下操作:

df = df.sort_index()['Adj Close']
d = df.max().to_frame(name='max')
d['last'] = df.iloc[-1,:]
d['change'] =  100.*(d['max'] - d['last'])/d['last']
d = d.sort_values('change', ascending=False)

返回:

                 max         last     change
Symbols                                     
LULU      398.290009   346.459991  14.959885
FB        303.910004   264.450012  14.921531
AAPL      134.179993   116.970001  14.713167
AMZN     3531.449951  3286.649902   7.448315
MSFT      231.649994   215.809998   7.339788
ADBE      533.799988   502.160004   6.300777
CRM       281.250000   265.980011   5.741029
V         216.479996   206.639999   4.761903
NVDA      573.859985   550.510010   4.241517
MA        365.694153   352.390015   3.775402
CRWD      145.130005   143.570007   1.086576

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM