2015-12-27 4 views
4

Я новичок в python pandas и пытался получить норма прибыли с помощью pct_change(). Я бы хотел получить ежемесячную скорость изменения по кормовому коду. Это мой текущий код:Скорость изменения Pandas Data Frame после группировки

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 

У меня есть два вопроса:

  1. Расчетная норма прибыли некорректно, поскольку ссылки на предшествующий день цена feedcode для расчета возврата на следующий код подачи. Например, поток AAV 2015-09-30 должен быть NaN и не -0,248696

  2. Я хотел бы, чтобы удалить все NaN

Я пытаюсь вычислить возвращается, чтобы получить что-то вроде этого:

Output: 
        Close Rate_Return 
Feed Date 
    A 2015-10-30 5.75 0.026786 
    AAV 2015-10-30 4.32 0.069444 

Каков наилучший способ сделать это? Заранее благодарим за любую помощь

+0

Было бы неплохо, имея образец исходного набора данных для работы, спасибо. –

ответ

2

IIUC вам нужно groupby by Feed от multiindex и применить pct_change. Затем вы можете использовать подмножество df3, где столбец Rate_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 
+0

Спасибо, миллион! – Dusty

+0

@jezrael pct_change() работает с текущим/предыдущим, как бы вы использовали его для предыдущего/текущего в том же фрейме? – toasteez

+0

Хм, возможно, вы можете изменить порядок столбцов на 'df = df [:: - 1]', применить 'pct_change' и последний возврат к исходному' print df.sort_index() ' – jezrael

Смежные вопросы