python – 分组后的变化率Pandas Data Frame

我是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

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...