2014-01-21 55 views
0

鑑於從CSV尋找這樣的熊貓數據幀時間內的閾值:最好的方式,如果一個值超過幀

DATE,DESCRIPTION,SELL,BUY: 
2014-01-16 15:25:57.817728,"text1",7,10 
2014-01-16 15:26:01.445759,"text2",5,8 
2014-01-16 15:26:57.856787,"text3",4,10 
... 

什麼是檢查的最好方式,在買入列雜交值低於特定時間範圍內的特定閾值,例如,爲了示例,在.minute 40和.minute 50之間,然後返回行號? (只有在發生交叉時,如果在給定時間內值已經低於特定閾值,則不是這樣)

+0

不知道如何回答這個如果csv不包括實際日期...:s –

+0

@AndyHayden我編輯了更準確的信息 –

回答

2

假設您的行按增加的時間順序進行排序(如'DATE'是數據列不是索引),那麼這裏有一種方法來實現你想要的:

要在第t行下面穿過THRESHOLD意味着在t的BUY < threshold和在t-1的BUY >= THRESHOLD。假設D是您的數據幀,這是通過條件來實現的:

cond = (D['BUY'] < threshold) & (D['BUY'].shift(1) >= threshold)

要獲得START_TIMEEND_TIME之間的所有交叉時間行索引:

d = D[cond]

cross_row_inds = d[(d['DATE'] >= START_TIME) & (d['DATE'] <= END_TIME)].index

您還首次可以選擇的時候,如果DATE是一個排序的日期時間指數代替,這可能是稍快的數據列。但在那裏,取決於您的語義,您可能需要在START_TIME之前包含一個時間實例。

+0

現在試試這個。對我而言,DATE是一個排序的日期時間索引。 –

+0

該條件似乎工作,我只是有一個問題,當調用日期,因爲列被解釋爲日期時間索引,它錯誤了這種方式:「KeyError:'沒有項目名爲DATE'。有沒有一種方式可以調用.minute從日期時間索引,而不是?(我的數據只包含持續時間少於一小時的數據) –

+0

如果date是一個索引,那麼你實際上可以使用call select,像d.select(lambda x:x .minute )。查看文檔瞭解詳細信息 –

相關問題