[英]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.