4

私はこのデータフレームを持っています:

    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

各行は、指定された日付に作成された平均、最高、最低、および数量の観察です。

60 日間の指数移動加重平均を計算しようとしています。

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

しかし、私は得る

TypeError: Only valid with DatetimeIndex or PeriodIndex

わかりましたので、構築時に DataFrame に DateTimeIndex を追加する必要があるかもしれません。コンストラクター呼び出しを次のように変更させてください

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 の計算方法に関する提案はありますか?

4

2 に答える 2

12

日付列が (文字列ではなく) 日付であることを確認し、インデックスをこれらの日付に設定するという 2 つのことが必要です。
次を使用して、これを一度に実行できます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
于 2013-06-19T00:57:30.380 に答える