2016-06-22 6 views
1

일부 데이터 열에 대해 특정 일치 후에 다음 행을 찾아야하는 고유하지 않은 정렬 된 datetime 인덱스가있는 DataFrame이 있습니다.열 값을 기준으로 DataFrame의 다음 행을 찾습니다.

새 DataFrame을 제공하는 DataFrame.query()를 사용하여 올바른 행을 찾을 수 있지만이 행이 원본 DataFrame의 위치를 ​​어떻게 찾을 수 있는지 알 수 없습니다.

import pandas as pd 
import numpy as np 
from datetime import datetime 

ts_index = [ 
     datetime.strptime('2016-06-19 22:50:22.189', '%Y-%m-%d %H:%M:%S.%f'), 
     datetime.strptime('2016-06-19 22:50:22.189', '%Y-%m-%d %H:%M:%S.%f'), 
     datetime.strptime('2016-06-19 22:50:22.610', '%Y-%m-%d %H:%M:%S.%f') 
     ] 
bid_price = [ 77.693, 77.692, 77.692 ] 
bid_qty = [ 50.0, 100.0, 50.0 ] 
ask_price = [ 77.709, 77.709, 77.709 ] 
ask_qty = [ 50.0, 50.0, 50.0 ] 

df = pd.DataFrame(index=ts_index, data={'BID_PRICE': bid_price, 
    'BID_QTY': bid_qty, 'ASK_PRICE': ask_price, 'ASK_QTY': ask_qty}) 

most_recent_match = df.query('(BID_PRICE == 77.692) and (BID_QTY == 100.0)').tail(1) 

print most_recent_match 

은 전체 행 (인덱스 컬럼)을 사용하여 DataFrame의 위치를 ​​찾아/검색 할 수는 예를 들면 :?

+0

인덱스를 재설정하여 고유 한 인덱스 번호를 식별 할 수 있습니까? – flyingmeatball

답변

1

이 작동합니까 산출? 그냥 인덱스를 재설정하고 뒤에있는 행의 인덱스를 확인하십시오

df = pd.DataFrame(index=ts_index, data={'BID_PRICE': bid_price, 
    'BID_QTY': bid_qty, 'ASK_PRICE': ask_price, 'ASK_QTY': ask_qty}) 

df.reset_index(inplace = True) 
most_recent_match = df.query('(BID_PRICE == 77.692) and (BID_QTY == 100.0)').tail(1) 

df.ix[most_recent_match.index[0]] 
1

는 그런 다음, 부울 마스크를 만들 하나의 행으로 아래로 이동할 수 :

mask = ((df['BID_PRICE'] == 77.692) & (df['BID_QTY'] == 100.0)).shift(1) 
df.loc[mask] 

In [17]: df.loc[mask] 
Out[17]: 
         ASK_PRICE ASK_QTY BID_PRICE BID_QTY 
2016-06-19 22:50:22.610  77.709  50.0  77.692  50.0 
+0

더 단순 해 보이지만 나에게 컴파일되지 않는다. NaN이 어디서 오는지 알 수 없다. ValueError : NA/NaN 값을 포함하는 벡터로 색인을 생성 할 수 없다. –

관련 문제