pandas - оптимальный выбор строк по условному столбцу

1

У меня есть следующий 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() - это одно решение, которое приходит на ум, но оно кажется неэффективным. Существует ли оптимальный способ выполнения этого условного отбора?

  • 0
    Может быть что-то вроде row_number = (df['ExpirationDate'] - current_date).dt.total_seconds().abs().idxmin()
Теги:
pandas

1 ответ

1
Лучший ответ

Найдите индекс минимальной абсолютной разности и индекса.

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.

  • 0
    Есть ли причина делать df.iloc[idx, :] df.iloc[idx] ?
  • 0
    @ajwood Нет, просто тщательно и подробно рассказываю об индексации. Они оба одинаковы.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню