如果日期属于日期字段中的日期,我如何查看日期属于哪个类别?我不能用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?我需要为数百行执行此操作,因此需要高效。
感谢,
答案 0 :(得分:1)
这是一种可以轻松扩展到更多匹配日期的方法:
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'
),以便您可以轻松地将其与查找日期一起加入数据框。
答案 1 :(得分:1)
您可以使用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