2013-06-19 31 views
2

計算數據幀的EWMA我有這樣的數據幀:通過時間

avg    date high low  qty 
0 16.92 2013-05-27 00:00:00 19.00 1.22 71151.00 
1 14.84 2013-05-30 00:00:00 19.00 1.22 42939.00 
2 9.19 2013-06-02 00:00:00 17.20 1.23 5607.00 
3 23.63 2013-06-05 00:00:00 5000.00 1.22 5850.00 
4 13.82 2013-06-10 00:00:00 19.36 1.22 5644.00 
5 17.76 2013-06-15 00:00:00 24.00 2.02 16969.00 

每一行就​​是在指定日期創建的平均,高,低,和qty的觀察。

我試圖計算指數移動加權平均60天的跨度:

df["emwa"] = pandas.ewma(df["avg"],span=60,freq="D") 

,但我得到

TypeError: Only valid with DatetimeIndex or PeriodIndex 

好吧,也許我需要一個DateTimeIndex增加我的DataFrame在構建時。讓我改變從

df = pandas.DataFrame(records) #records is just a list of dictionaries 

我的構造函數調用

rng = pandas.date_range(firstDate,lastDate, freq='D') 
df = pandas.DataFrame(records,index=rng) 

但現在我得到

ValueError: Shape of passed values is (5,), indices imply (5, 1641601) 

如何計算我的EMWA有什麼建議?

回答

9

您需要兩件事情,確保日期列是日期(而不是字符串)並將索引設置爲這些日期。
可以一氣呵成使用to_datetime做到這一點:

In [11]: df.index = pd.to_datetime(df.pop('date')) 

In [12]: df 
Out[12]: 
       avg  high low qty 
date 
2013-05-27 16.92 19.00 1.22 71151 
2013-05-30 14.84 19.00 1.22 42939 
2013-06-02 9.19 17.20 1.23 5607 
2013-06-05 23.63 5000.00 1.22 5850 
2013-06-10 13.82 19.36 1.22 5644 
2013-06-15 17.76 24.00 2.02 16969 

然後就可以調用emwa預期:

In [13]: pd.ewma(df["avg"], span=60, freq="D") 
Out[13]: 
date 
2013-05-27 16.920000 
2013-05-28 16.920000 
2013-05-29 16.920000 
2013-05-30 15.862667 
2013-05-31 15.862667 
2013-06-01 15.862667 
2013-06-02 13.563899 
2013-06-03 13.563899 
2013-06-04 13.563899 
2013-06-05 16.207625 
2013-06-06 16.207625 
2013-06-07 16.207625 
2013-06-08 16.207625 
2013-06-09 16.207625 
2013-06-10 15.697743 
2013-06-11 15.697743 
2013-06-12 15.697743 
2013-06-13 15.697743 
2013-06-14 15.697743 
2013-06-15 16.070721 
Freq: D, dtype: float64 

,如果你設置此爲一列:

In [14]: df['ewma'] = pd.ewma(df["avg"], span=60, freq="D") 

In [15]: df 
Out[15]: 
       avg  high low qty  ewma 
date 
2013-05-27 16.92 19.00 1.22 71151 16.920000 
2013-05-30 14.84 19.00 1.22 42939 15.862667 
2013-06-02 9.19 17.20 1.23 5607 13.563899 
2013-06-05 23.63 5000.00 1.22 5850 16.207625 
2013-06-10 13.82 19.36 1.22 5644 15.697743 
2013-06-15 17.76 24.00 2.02 16969 16.070721 
+0

僅供參考,你可能知道這一點,但ewma語法已經更新,所以答案已經過時,儘管熊貓仍然處理這個問題以及一個有用的解釋給出新語法的消息。只是以爲我會提醒你,如果你想更新,因爲它是一個有點大量的問題 – JohnE