2015-11-06 71 views
0

我有python的經驗,但即時通訊新的熊貓,經過一整天試圖做到這一點我無法解決它,我嘗試了很多differents方法,但任何人爲我工作。 我有一個這樣的數據庫:在大熊貓不同日期行之間的計算

open low high close volume interest               
2008-08-05 10:00:00 22.53 22.12 22.53 22.14  186  186 
2008-08-05 11:00:00 22.20 22.05 22.11 22.10  584  398 
2008-08-05 12:00:00 22.19 22.04 22.08 22.15  848  264 
2008-08-05 13:00:00 22.20 22.06 22.13 22.13  928  80 
2008-08-05 14:00:00 22.19 22.03 22.13 22.08  988  60 
2008-08-05 15:00:00 22.37 21.72 22.20 21.77 1418  430 
2008-08-05 16:00:00 21.80 21.47 21.77 21.47 1666  248 
2008-08-05 17:00:00 21.50 21.37 21.43 21.40 1865  199 
..... 

和IM試圖使index.hour == 17的接近柱和index.hour == 6的接近柱之間的減法,每一天。

如果我嘗試這樣的:

df[df.index.hour==17].close.sub(df[df.index.hour==6].open) 

結果爲NaN,如果我嘗試做一個新的數據幀,結果是楠太。 我該怎麼做?也許我對熊貓不太瞭解,而且做起來並不那麼容易,我需要製作一個完整的腳本?由於

回答

1

可能不是最優雅的方式來做到這一點,但讓我們看到:

In [54]: 
#changed your first observation to 6:00 
print df 

         open low high close volume interest 
2008-08-05 06:00:00 22.53 22.12 22.53 22.14  186  186 
2008-08-05 11:00:00 22.20 22.05 22.11 22.10  584  398 
2008-08-05 12:00:00 22.19 22.04 22.08 22.15  848  264 
2008-08-05 13:00:00 22.20 22.06 22.13 22.13  928  80 
2008-08-05 14:00:00 22.19 22.03 22.13 22.08  988  60 
2008-08-05 15:00:00 22.37 21.72 22.20 21.77 1418  430 
2008-08-05 16:00:00 21.80 21.47 21.77 21.47 1666  248 
2008-08-05 17:00:00 21.50 21.37 21.43 21.40 1865  199 

In [55]: 

df[np.in1d(df.index.hour, [6, 17])].groupby(pd.TimeGrouper(freq='24h')).close.agg(lambda x: x[-1]-x[0]) 

Out[55]: 

2008-08-05 0.74 
Freq: 24H, Name: close, dtype: float64 

的想法是一個片段的數據幀,使得它僅包含6點17點鐘位置的數據。然後我們每天分組,並計算每天17點和6點收盤價之間的差額,對於

如果你有興趣在最後關閉和首開的區別:

In [96]: 

grp = df.ix[np.in1d(df.index.hour, [6, 17]), 

      ['open','close']].groupby(pd.TimeGrouper(freq='24h')) 

grp.close.last()-grp.open.last() 

Out[96]: 

2008-08-05 -0.1 
Freq: 24H, dtype: float64 
+0

太棒了!謝謝!我不知道我可以每天分組(第一次使用numpy和熊貓) –

1

如果數據幀被很好地定義(你並不需要檢查,每天包含6至17 O」時鐘數據)你可以使用pandas.DataFrame.diff和查詢:

>>> df['hour'] = df.index.hour 
    >>> df.query('hour == 6 | hour == 17').diff() 

        open low high close volume interest hour 
datetime                
2008-08-05 06:00:00 NaN NaN NaN NaN  NaN  NaN NaN 
2008-08-05 17:00:00 -1.03 -0.75 -1.1 -0.74 1679  13 11 
    >>> df.query('hour == 6 | hour == 17').diff(-1) 

        open low high close volume interest hour 
datetime                
2008-08-05 06:00:00 1.03 0.75 1.1 0.74 -1679  -13 -11 
2008-08-05 17:00:00 NaN NaN NaN NaN  NaN  NaN NaN