2014-01-15 7 views
7

私はpandas DataFrameに過去の取引データを持っています。これには、DateTimeIndexで索引付けされた価格列とボリューム列が含まれています。例えばパンダでOHLCVに取引データをリサイズ

:今

>>> print df.tail() 
          price volume 
2014-01-15 14:29:54+00:00 949.975 0.01 
2014-01-15 14:29:59+00:00 941.370 0.01 
2014-01-15 14:30:17+00:00 949.975 0.01 
2014-01-15 14:30:24+00:00 941.370 0.01 
2014-01-15 14:30:36+00:00 949.975 0.01 

、私は大丈夫ですdf.resample(freq, how={'price': 'ohlc'})を使用して、OHLCデータにこれをリサンプリングすることができますが、私はまた、ボリュームを含めるようにしたいと思います。

私はdf.resample(freq, how={'price': 'ohlc', 'volume': 'sum'})をしようとすると、私が手:

ValueError: Shape of passed values is (2,), indices imply (2, 95)

私は私のデータセットと間違っているものをかなりよく分からない、あるいは、なぜこれが失敗しました。誰もがこれについていくつかの光を当てることができますか?とても有難い。

答えて

10

問題はリサンプリングではなく、マルチプレックス(OHLCの価格から)と、通常のインデックス(ボリューム合計)との連結を試みたことによるものです。

In [34]: vol = df.resample('30s', how={'volume': 'sum'}) 

In [35]: vol.columns = pd.MultiIndex.from_tuples([('volume', 'sum')]) 

In [36]: vol 
Out[36]: 
        volume 
         sum 
2014-01-15 14:29:30 0.02 
2014-01-15 14:30:00 0.02 
2014-01-15 14:30:30 0.01 

[3 rows x 1 columns] 

In [37]: price = df.resample('30s', how={'price': 'ohlc'}) 

In [38]: pd.concat([price, vol], axis=1) 
Out[38]: 
         price        volume 
         open  high  low close  sum 
2014-01-15 14:29:30 949.975 949.975 941.370 941.370 0.02 
2014-01-15 14:30:00 949.975 949.975 941.370 941.370 0.02 
2014-01-15 14:30:30 949.975 949.975 949.975 949.975 0.01 

[3 rows x 5 columns] 

しかし、リサンプルが自動的にこれを扱うことができれば、それは良いかもしれない:

In [17]: df 
Out[17]: 
         price volume 
2014-01-15 14:29:54 949.975 0.01 
2014-01-15 14:29:59 941.370 0.01 
2014-01-15 14:30:17 949.975 0.01 
2014-01-15 14:30:24 941.370 0.01 
2014-01-15 14:30:36 949.975 0.01 

[5 rows x 2 columns] 

In [18]: df.resample('30s', how={'price': 'ohlc'}) # Note the MultiIndex 
Out[18]: 
         price       
         open  high  low close 
2014-01-15 14:29:30 949.975 949.975 941.370 941.370 
2014-01-15 14:30:00 949.975 949.975 941.370 941.370 
2014-01-15 14:30:30 949.975 949.975 949.975 949.975 

[3 rows x 4 columns] 

In [19]: df.resample('30s', how={'volume': 'sum'}) # Regular Index for columns 
Out[19]: 
        volume 
2014-01-15 14:29:30 0.02 
2014-01-15 14:30:00 0.02 
2014-01-15 14:30:30 0.01 

[3 rows x 1 columns] 

私はあなたが手動で(volume, sum)のためのマルチインデックスを作成し、連結ことができると思います。あなたは今、パンダ 例のそれ以降のバージョンでこれを行うことができます

+0

問題:https://github.com/pydata/pandas/issues/5946 – Jeff

+0

これは、ように見えます新しいリサンプルAPI( 'df.resample( '30S')。agg({'price': 'ohlc'、 'volume': 'sum'})')で解決されます。 – ayhan

0

:パンダバージョン、内部で、このための0.22.00 df.resample('30S').mean()

関連する問題