2016-02-03 3 views
2

У меня есть следующие DataFrame:Вычислить процентное изменение на панде DataFrame

    Value  1lag 
Date                  
2005-04-01 258.682029 214.382786 
2005-05-01 173.253998 258.682029 
2005-06-01 244.432029 173.253998 
2005-07-01 213.706019 244.432029 
2005-08-01 213.670665 213.706019 

Это абсолютные значения двух временных рядов. Тем не менее, я не хочу, чтобы эти абсолютных значений, я хочу вариацию из них, так что они получают, чтобы выглядеть следующим образом:

    Value  1lag 
Date                  
2005-04-01   NaN   NaN 
2005-05-01  0.3302  -0.2066 
2005-06-01  -0.4108  0.3302 
2005-07-01  0.1257  -0.4108 
2005-08-01  0.0002  0.1257 

Есть простая команда, чтобы сделать это? Если нет, то каково было бы ваше предложение достичь этого результата?

+3

'df.pct_change()' – Alexander

+1

@Alexander сделать этот ответ –

ответ

8

Вы можете просто использовать pct_change() на информационной карте.

>>> df.pct_change() 
       Value  1lag 
Date       
2005-04-01  NaN  NaN 
2005-05-01 -0.330243 0.206636 
2005-06-01 0.410831 -0.330243 
2005-07-01 -0.125704 0.410831 
2005-08-01 -0.000165 -0.125704 

Сравнивая результаты выше с вашими, вам нужно будет использовать -df.pct_change() если вы хотите отменить это изменение, как вы сделали.

2

Что-то вроде этого?

>>> 1 - df/df.shift(1) 
       Value  1lag 
Date       
2005-04-01  NaN  NaN 
2005-05-01 0.330243 -0.206636 
2005-06-01 -0.410831 0.330243 
2005-07-01 0.125704 -0.410831 
2005-08-01 0.000165 0.125704 
0

Вы можете повторить ответ Александра с помощью приведенного ниже кода. Я ответ боится, Роман имеет неправильный знак

>>> (df-df.shift(1))/df.shift(1) 
       Value  1lag 
2011-01-31  NaN  NaN 
2011-02-28 -0.330243 0.206636 
2011-03-31 0.410831 -0.330243 
2011-04-30 -0.125704 0.410831 
2011-05-31 -0.000165 -0.125704 
Смежные вопросы