У меня есть следующий DataFrame:
dataPoint RIC ExpirationDate Exchange Description \
closingDate
2002-10-15 4207 SPH3 2003-03-20 CME:Index and Options Market
2002-10-15 5400 SPH4 2004-03-18 CME:Index and Options Market
2002-10-15 18661 SPM3 2003-06-19 CME:Index and Options Market
2002-10-15 19918 SPM4 2004-06-17 CME:Index and Options Market
2002-10-15 33439 SPU3 2003-09-18 CME:Index and Options Market
2002-10-15 35523 SPU4 2004-09-16 CME:Index and Options Market
2002-10-15 47733 SPZ2 2002-12-19 CME:Index and Options Market
2002-10-15 49022 SPZ3 2003-12-18 CME:Index and Options Market
Я хочу захватить строку с ExpirationDate, ближайшим к моему закрытию (обратите внимание, что у меня есть статическое закрытие, которое хранится в переменной current_date).
df.iterrows() - это одно решение, которое приходит на ум, но оно кажется неэффективным. Существует ли оптимальный способ выполнения этого условного отбора?
Найдите индекс минимальной абсолютной разности и индекса.
v = pd.to_datetime(df.reset_index()['ExpirationDate'])
idx = (v.mask(v < current_date)
- pd.to_datetime(current_date)).abs().idxmin()
row = df.iloc[idx, :]
Я вижу здесь одну проблему: если ваши значения индекса не уникальны, вам нужно будет индексировать позицию, а не метку. По этой причине я добавляю вызов reset_index
.
df.iloc[idx, :]
df.iloc[idx]
?
row_number = (df['ExpirationDate'] - current_date).dt.total_seconds().abs().idxmin()