问题描述
df.head()=
Open High Low Close
2017-11-12 132.960 133.340 132.940 133.105
2017-11-13 133.110 133.255 132.710 132.755
2017-11-14 132.755 132.985 132.640 132.735
2017-11-15 132.730 132.790 132.575 132.685
2017-11-16 132.685 132.785 132.625 132.755
我想找到我应该以开盘价购买的日期(假设时间可以调回),恰好在30天后以收盘价出售。
这是我所做的:
df_open = df[['Open']]
df_close = df[['Close']].shift(-30)
df_close = df_close.rename(columns={'Close':'Close_30days_Later'})
df_merged = pd.merge(df_open,df_close,on='Date')
df_merged['Profit'] = df_merged['Close_30days_Later'] - df_merged['Open']
print(f"The highest profit occurs if we go back onto {df_merged['Profit'].idxmax().strftime('%A %B %d,%Y')} to get the profit equals {df_merged.loc[btc_merged['Profit'].idxmax()]['Profit']:.2f}")
我很确定这可以为任何库存数据提供正确的答案。但是,实践问题迫使我必须在此起始代码中使用rolling
操作。
def func(df):
# DELETE `pass` below and replace it with your code
pass
rolling_df = df.rolling("30d")
还有我应该遵循的指示。
我尝试了以下操作:
def func(df):
df['Open'] = df['Close'].shift(-30) - df['Open']
return df.max()
将func
用作函数,即func(df)
时,它将返回最大值,就像我上面做的方法一样。我认为当在agg
方法中作为参数传递时,它应该工作。当我这样做时,发生KeyError:“关闭”。我尝试使用iloc更改列,其中“打开”为iloc[:,0]
,而“关闭”为iloc[:,3]
,但这也不起作用。
在指定滚动操作使用的列名称时似乎存在一些问题。(实际上,在自定义agg中指定列的名称确实可以在其他设置中工作,例如groupby,但稍稍有点不同的环境。)
有人有什么建议吗?
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)