我有一个带有非唯一排序日期时间索引的DataFrame,我需要在某些数据列的特定匹配后找到下一行。
我可以使用DataFrame.query()找到正确的行,它为我提供了一个新的DataFrame,但我不知道如何找到此行在原始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 :(得分: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
答案 1 :(得分: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]]