Pandaify-Pythonify(最大观察值,最后一次观察值)计算
我有一个简单的问题,我能解决,但我认为我的解决方案不符合标准。很乱。 我想借此机会学习简化计算 这是设置Pandaify-Pythonify(最大观察值,最后一次观察值)计算,python,pandas,Python,Pandas,我有一个简单的问题,我能解决,但我认为我的解决方案不符合标准。很乱。 我想借此机会学习简化计算 这是设置 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=
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是从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
你能展示你的数据框是什么样子吗?其中一个样本为数据帧样本绘制了一行和屏幕截图。df.loc[idx[datetime.datetime(2020,1,1):],idx['Adj Close',['MSFT','CRWD']]]。head(5)@jlandercy输入样本由熊猫数据读取器给出。我发布的代码应该是一个可复制的示例。开源Python模块和互联网是必需的。我见过它,不管怎样,总是复制粘贴数据而不是截图。图像是数字数据的糟糕媒介。我喜欢你计算百分比的方式。有没有办法绕过我在代码中使用的pd.concat()?我期待一个数据帧作为结果,索引作为符号,3列(最大关闭,最后关闭,百分比差异)。@KeerikkattuChellappan,更新以考虑到它。排序的wrt百分比变化。