Pandas datetime находит ближайшую дату до заданной даты.Если его не существует, получите ближайшую дату - PullRequest
1 голос
/ 17 марта 2019

У меня разные группы транзакций, и в каждой группе транзакций есть разные даты.Я хочу получить ближайшую дату, которая до данной даты. Однако , если его не существует, просто получите ближайшую дату.Например,

Скажите, что заданная дата для следующих двух примеров: np.datetime(2014,12,16)

Пример 1 :

Даты в группе:: np.datetime(2014,12,17), np.datetime(2014,12,15) и np.datetime(2014,12,14)

Возвращаемое значение должно быть np.datetime(2014,12,15) с ближайшей даты ДО указанной даты сверху.Мы устанавливаем приоритеты не только для получения даты, которая до указанной даты, но и ближайшей единицы к ней.

Пример 2 :

Даты в группе: np.datetime(2014,12,17), np.datetime(2014,12,18) и np.datetime(2014,12,19)

Возвращаемое значение должно быть np.datetime(2014,12,17), поскольку до указанной даты нет ближайших дат, ближайшихдата к вышеуказанной дате будет повернута.

Я нашел функцию, которая выглядит так, как будто она удовлетворяет 2-му примеру, но не первому:

def nearest(items, pivot): return min(items, key=lambda x: abs(x - pivot))

Любойпомощь будет принята с благодарностью, спасибо!

1 Ответ

2 голосов
/ 17 марта 2019

Проверка с searchsorted

def yourfunc(items,pivot):
    items=np.sort(items)
    if np.searchsorted(items,s)==0:
        return items[np.searchsorted(items,s)]
    else :
        return items[np.searchsorted(items, s)-1]

yourfunc(ary1,s)
Out[148]: datetime.datetime(2014, 12, 15, 0, 0)
yourfunc(ary2,s)
Out[149]: datetime.datetime(2014, 12, 17, 0, 0)

Ввод данных

ary1=np.array([pd.datetime(2014,12,17), pd.datetime(2014,12,15), pd.datetime(2014,12,14)])
ary2=np.array([pd.datetime(2014,12,17), pd.datetime(2014,12,18), pd.datetime(2014,12,19)]


s=pd.datetime(2014,12,16)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...