Python 在每个数据帧行中查找前3个值
我试图从Python 在每个数据帧行中查找前3个值,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我试图从monthly\u returndataframe中找出每个月回报率最高的前3只股票 结果应该如下所示: 数据: !curl -L -s -o open_price.csv https://drive.google.com/uc?id=1eClVnVMMgw5bIFJ8sMS8h4d5Msj5gyKo !curl -L -s -o low_price.csv https://drive.google.com/uc?id=1yRafpOnVQbCGUKq5YnIfXTZisCJQ386
monthly\u return
dataframe中找出每个月回报率最高的前3只股票
结果应该如下所示:
数据:
!curl -L -s -o open_price.csv https://drive.google.com/uc?id=1eClVnVMMgw5bIFJ8sMS8h4d5Msj5gyKo
!curl -L -s -o low_price.csv https://drive.google.com/uc?id=1yRafpOnVQbCGUKq5YnIfXTZisCJQ386x
!curl -L -s -o high_price.csv https://drive.google.com/uc?id=1Kpwh_EgwjpSsFXojLrPvznmyl7z9_afk
!curl -L -s -o close_price.csv https://drive.google.com/uc?id=1IF96oVlbz1wOOKrcYbT7J1P6UCxVa5XI
!curl -L -s -o adj_close_price.csv https://drive.google.com/uc?id=1CjlEcxZkzYrNbqNQHPwLlAEvciEmtTF2
!ls
1。任务1
导入5.csv文件,并相应地将生成的数据帧命名为open\u price
,low\u price
,high\u price
,close\u price
,以及adj\u close\u price
我的答覆是:
open_price = pd.read_csv("open_price.csv")
low_price = pd.read_csv("low_price.csv")
high_price = pd.read_csv("high_price.csv")
close_price = pd.read_csv("close_price.csv")
adj_close_price = pd.read_csv("adj_close_price.csv")
2。任务2
将5个数据帧重新整形并组合为1个具有以下格式的数据帧(命名为price
)
任务3
接下来,使用调整后的收盘价(列Adj Close
)计算这7家公司自2015年5月以来的月度股票回报率。调整后的收盘价是一种考虑了股息支付、分割和其他直接影响总体回报的因素的衡量方法
为了计算月度股票收益率,我们需要将月末调整后的收盘价与月初调整后的收盘价进行比较。回报率的计算公式是将最后一天的价格除以一个月内第一天的价格。然后从该结果中减去数字1。您可以将结果保留为十进制格式。命名生成的DataFrame
每月返回值
。它应该如下所示:
我的答案(我还没有真正完成这一个,因为我不知道如何1)删除月份文本和2)删除符号文本
stock = close_price
stock["Month"] = close_price["Date"].apply(lambda x: x[0:7])
stock_1 = pd.melt(stock, id_vars=["Date","Month"], var_name="Symbol", value_name="Adj Close")
stock_1_grp = stock_1.groupby(["Month","Symbol"])
stock_2 = stock_1_grp.agg([("", lambda x: x.iloc[len(x)-1]/x.iloc[0]-1)])
stock_2_pivot = pd.pivot_table(stock_2,values="Adj Close", index="Month", columns="Symbol")
stock_2_pivot.sort_index(axis=1)
stock_2_pivot.reset_index()
monthly_return = stock_2_pivot.iloc[1:36,0:]
monthly_return.reset_index()
当前数据帧表:
任务4[主要问题]根据月度回报率,找出每个月回报率最高的前3只股票。结果应如下所示:
对于任务3、任务4或我的任何错误代码的任何帮助和建议,我们将不胜感激 你必须先去掉多重索引,我认为应该这样做:
monthly_return.columns = [j for i,j in monthly_return.columns]
monthly_return.reset_index(inplace=True)
Month AMZN APPL FB GOOG NFLX SBUX TSLA
0 2015-05 0.015040 0.010314 0.002532 -0.010764 0.120335 0.033207 0.109587
1 2015-06 0.007356 -0.039145 0.068253 -0.025244 0.054445 0.026810 0.075406
处理此类数据的一种更简单的方法是长轴心、排序并取前N,因此我们将其包装到一个函数中,以防止数据帧过度填充环境。。(我不知道你有多少……):
然后我们做:
topN(monthly_return,3)
Month variable value
140 2015-05 NFLX 0.120335
210 2015-05 TSLA 0.109587
175 2015-05 SBUX 0.033207
211 2015-06 TSLA 0.075406
71 2015-06 FB 0.068253
141 2015-06 NFLX 0.054445
2 2015-07 AMZN 0.225794
142 2015-07 NFLX 0.220795
107 2015-07 GOOG 0.198854
您可以将数据添加为文本吗?您可以将
打印结果(monthly\u return.head().to\u dict())
添加为问题中的文本而不是图像吗?也许还可以分享你的尝试。我编辑了它,并把整个问题,包括我的代码。谢谢你的帮助@可以用于任务4的数据类型
def topN(data,n):
df = data.melt(id_vars='Month')
df = df.sort_values(by='value', ascending=False)
df = df.groupby('Month').head(n)
return df.sort_values(['Month','value'],ascending=[True,False])
topN(monthly_return,3)
Month variable value
140 2015-05 NFLX 0.120335
210 2015-05 TSLA 0.109587
175 2015-05 SBUX 0.033207
211 2015-06 TSLA 0.075406
71 2015-06 FB 0.068253
141 2015-06 NFLX 0.054445
2 2015-07 AMZN 0.225794
142 2015-07 NFLX 0.220795
107 2015-07 GOOG 0.198854