2014-01-29 3 views
1

Если у меня есть Панды DataFrame с MultiIndex, где первый уровень является символом, то второй уровень является дата, что это самый простой способ выполнить ewma или shift операцию по данным.EWMA или сдвиг мультииндексных

В настоящее время наивно смещающиеся сдвиги по символам.

Возможно, мне нужно использовать Panel?

Использование:

In [13]: pd.concat({"GOOG": pd.DataFrame({'price':[100,101]},index=["2013-1-1","2013-1-2"]),"AAPL": pd.DataFrame({'price':[100,101]},index=pd.to_datetime(["2013-1-1","2013-1-2"]))}, axis=0, names=["Symbol", "Date"]) 
Out[13]: 
       price 
Symbol Date 
AAPL 2013-1-1 100 
     2013-1-2 101 
GOOG 2013-1-1 100 
     2013-1-2 101 

In [17]: df.shift() 
Out[17]: 
       price 
Symbol Date 
AAPL 2013-1-1 NaN 
     2013-1-2 100 
GOOG 2013-1-1 101 
     2013-1-2 100 

Это выглядит, как она может работать, но Panel расположение, безусловно, не является интуитивно понятным: df.to_panel().shift(1, axis="minor").ix["price"]

ответ

2

использование groupby():

df.groupby(level=0).transform("shift") 
+1

Это работает. Случай 'ewma' может быть разрешен аналогично:' df.groupby (level = 0) .apply (lambda x: pd.ewma (x, com = 2)) ' –

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