Python 分组后数据帧的更改率

Python 分组后数据帧的更改率,python,pandas,Python,Pandas,我是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

我是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
我有两个问题:

  • 计算的回报率不正确,因为它参考前一天的feedcode价格来计算下一个feed代码的回报。例如,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
    从multiindex订阅并应用。然后您可以使用
    df3
    的子集,其中列
    Rate\u Return
    notnull

    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
    

    如果有一个原始数据集的样本可以使用,那就太好了,谢谢。@jezrael pct_change()适用于当前/上一个,您将如何在同一帧中对上一个/当前使用它?嗯,也许您可以通过
    df=df[::-1]
    更改列的顺序,应用
    pct_change
    并最后返回原始
    打印df.sort_index()