Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandaify-Pythonify(最大观察值,最后一次观察值)计算_Python_Pandas - Fatal编程技术网

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百分比变化。