Сформировать даты и проверить интервал дат в пандах - PullRequest
0 голосов
/ 03 мая 2018

Как я могу проверить, к какой категории относится дата, если она находится между датами в поле даты? Я не могу использовать merge_asof в качестве работы; pandas только v0.18.

d = {'buckets': ['1D', '1W', '1M'], 'dates': ['03-05-2018', '10-05-2018', '03-06-2018']}
date_buckets = pd.DataFrame(data=d)


    buckets dates
0   1D  03-05-2018
1   1W  10-05-2018
2   1M  03-06-2018

Так, например, если дать дату 07-05-2018, как я могу вернуть 1W? Я должен был бы сделать это для сотен рядов, поэтому должен быть эффективным.

спасибо,

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете использовать pandas.cut для значений биннинга:

import pandas as pd

d = {'buckets': ['1D', '1W', '1M'],
     'dates': ['03-05-2018', '10-05-2018', '03-06-2018']}
df_bin = pd.DataFrame(data=d)

df_bin['dates'] = pd.to_datetime(df_bin['dates'], dayfirst=True)\
                    .dt.strftime('%Y%m%d').astype(int)

df = pd.DataFrame({'date': ['07-05-2018']})
df['date'] = pd.to_datetime(df['date'], dayfirst=True)\
               .dt.strftime('%Y%m%d').astype(int)

df['Tenor'] = pd.cut(df['date'],
                     bins=df_bin['dates'],
                     labels=df_bin['buckets'].iloc[1:])

print(df)

       date Tenor
0  20180507    1W
0 голосов
/ 03 мая 2018

Вот один из способов, который может быть легко расширен для соответствия:

scalar_date = pd.DataFrame(index=[pd.to_datetime("07-05-2018", format="%d-%m-%Y")])

scalar_date.join(date_buckets. \
                   set_index('dates'). \
                   reindex(pd.date_range(date_buckets.dates.min(), \
                                         date_buckets.dates.max()), \
                           method='bfill'))

#            buckets
# 2018-05-07      1W

Идея состоит в том, чтобы изменить размер вашего date_buckets фрейма данных (используя .reindex с method='bfill'), чтобы вы могли легко присоединить его к фрейму данных с датами поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...