2016-06-22 4 views
1

値を見つけます。列に基づいてデータフレームの次の行は私がデータの一部の列の特定の試合後に次の行を見つける必要が非固有ソート日時指数を有するデータフレームを有する

私は私に新しいデータフレームを与えるが、私はこの行は、元のデータフレームである場合、私は見つけることができるかわからないDataFrame.query()で正しい行を見つけることができます。

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 

それは行全体(インデックスとカラム)を用いてデータフレーム内の位置を突き止める/検索することができる:ここでの例はありますか?

+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

あなたはその後、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のvalues'を含むベクターでないインデックスができ –

関連する問題