我是python pandas的新手,并且一直试图使用pct_change()来获得回报率.我想通过Feedcode获得每月变化率.
这是我目前的代码:
In [134]:
df3 = pd.read_csv(r'C:\Users\sector_set.csv')
df3.set_index('Date', inplace= True)
df3= pd.DataFrame(df3,columns = ['Feed','Close']) # filter specific col
grouped = df3.groupby('Feed') #group by Feedcode
df3 = grouped.resample('BM', how=lambda x:x[-1]) #ending of every month only
df3['Rate_Return'] = df3.pct_change() # Rate of Return of each Feedcode
df3
OUTPUT:
Close Rate_Return
Feed Date
A 2015-09-30 5.60 NaN
2015-10-30 5.75 0.026786
AAV 2015-09-30 4.32 -0.248696
2015-10-30 4.62 0.069444
我有两个问题:
>计算的回报率不正确,因为它参考前一天的饲料代码价格来计算下一个饲料代码的回报.例如,Feed AAV 2015-09-30应该是NaN而不是-0.248696
>我想删除所有NaN
我试图计算返回值来得到这样的东西:
Output:
Close Rate_Return
Feed Date
A 2015-10-30 5.75 0.026786
AAV 2015-10-30 4.32 0.069444
这样做的最佳方式是什么?
在此先感谢您的帮助
解决方法:
IIUC你需要groupby by Feed from multiindex并应用pct_change
.然后你可以使用df3的子集,其中列Rate_Return不是空的
df3['Rate_Return'] = df3.groupby(level=0).pct_change()
print df3
Close Rate_Return
Feed Date
A 2015-09-30 5.60 NaN
2015-10-30 5.75 0.026786
AAV 2015-09-30 4.32 NaN
2015-10-30 4.62 0.069444
print df3[df3.Rate_Return.notnull()]
Close Rate_Return
Feed Date
A 2015-10-30 5.75 0.026786
AAV 2015-10-30 4.62 0.069444
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。