2016-11-25 69 views
-2

時間戳我有一個值蟒熊貓 - 檢索從一個數據幀的值與中的另一個

entry_time=2000-01-03 00:00:00 

的2個dataframes。 允許撥打以下一個「數據」

timestamp    value         
2000-01-03 00:00:00  25 
2000-01-03 00:30:00  -10 
2000-01-03 01:00:00  100 
2000-01-03 01:30:00  -690 
2000-01-03 02:00:00  650 
2000-01-03 02:30:00  320 
2000-01-03 03:00:00  150 
2000-01-03 03:30:00  160 

,第二個「DATA2」(下):

exit_time    answer 
2000-01-03 01:00:00  true 
2000-01-03 01:30:00  true  
2000-01-03 02:00:00  true  
2000-01-03 02:30:00  false  
2000-01-03 03:00:00  true 

我想執行以下操作: 爲每一行計算的最大值entry_time

之間exit_time

exit_time    answer  max 
2000-01-03 01:00:00  true  100 
2000-01-03 01:30:00  true  100 
2000-01-03 02:00:00  true  650 
2000-01-03 02:30:00  false  650 
2000-01-03 03:00:00  true  650 
做,所以我需要在每個時間戳從數據檢索值數據2使用它。我嘗試了許多這樣的公式的變體,但它讓我無處可尋。

data2['value'] = data[data2['exit_time']].value 

什麼,我特林實現可能看起來像的,完整的公式:

data2['max']= data[entry_time: data[data2['exit_time']]].high.max() 

謝謝!

+1

你想'合併':'data2.merge(data,on ='timestamp',how ='left')',這會將data2與時間戳列上的數據合併,並根據需要添加額外的列 – EdChum

+0

嗨thx - 沒有它不是我想要的。 我簡化了很多,以清晰的方式提出問題,但我不想僅僅合併2個數據框在我正在執行的代碼中。我正在對數據執行更復雜的操作 - 因此我需要以類似於示例 –

+0

@jimbasquiat的方式檢索它。EdChum的答案給出了您希望的輸出。然後,您可以在合併後在「值」列上執行任何所需的操作。 – TheF1rstPancake

回答

0

我使用下面的整數代替原始數據框中的日期時間數據,但代碼完全相同。

首先,重新創建數據:

>>> data = pd.DataFrame({'timestamp': [1, 2, 3, 4, 5, 6, 7, 8], 'value': [25, -10, 100, -690, 650, 320, 150, 160]}) 
>>> data 
    timestamp value 
0   1  25 
1   2 -10 
2   3 100 
3   4 -690 
4   5 650 
5   6 320 
6   7 150 
7   8 160 
>>> data2 = pd.DataFrame({'timestamp': [3, 4, 5, 6, 7], 'answer': [True, True, True, False, True]}) 
>>> data2 
    answer timestamp 
0 True   3 
1 True   4 
2 True   5 
3 False   6 
4 True   7 

然後,應用您從data其時間戳在data2想只有那些行你的邏輯。

>>> data[data['timestamp'].isin(data2['timestamp'])] 
    timestamp value 
2   3 100 
3   4 -690 
4   5 650 
5   6 320 
6   7 150 

使用data['timestamp'].isin(data2['timestamp']),返回此:

>>> data['timestamp'].isin(data2['timestamp']) 
0 False 
1 False 
2  True 
3  True 
4  True 
5  True 
6  True 
7 False 
Name: timestamp, dtype: bool 

這給了我們布爾值(口罩,有效地):因爲這(你想要下面的結果),它是那麼容易Truedata行其值timestamp也在data2['timestamp']中找到;如果找不到,則爲假。然後,我們只使用該掩碼從data中選擇數據。

編輯:上述解決方案滿足您的原始要求。你已經改變了這個問題,但是這會讓你獲得很多。

+0

嗨thx,你能看看我編輯的問題嗎?對不起,我是超級noob,我很難得到時間戳到切片...你的回答很有趣,但我仍然不知道如何讓它發揮作用。此外,邏輯'data [data ['timestamp']]'不起作用並返回錯誤。 –

+0

'data ['timestamp']。isin(data2 ['timestamp'])]'是你想要的,雖然這不會給你你正在尋找的最大值計算。你是否在尋找一種「跑步」最大值(即當你向前移動時,繼續檢查當前值是否大於以前的最大值)? – blacksite

+0

是的,基本上,切片創建了一個多行的窗口,其中爲每一行計算最大值。我試過公式建議'data [data ['timestamp']。isin(data2 ['timestamp'])]'但它也沒有工作..也似乎對我的目的非常不祥..是否沒有辦法檢索索引一個單行的更簡單的方法來處理它? –

相關問題