我有SAS背景,我是Python新手。我想以类似于使用SAS间隔的方式使用PeriodIndex。这是我的问题: 我们的官方利率每月或多或少地公布。该利率在下一个利率公布之前有效。我的目标是在任何给定日期(我们称之为reference_date)获取当天的有效利率。
df = pd.DataFrame({ 'publication_date': ['2012-07-03', '2012-08-02', '2012-09-04', '2012-10-02', '2012-11-03', '2012-12-04' ] ,
'interest_value': [1.219, 1.061, 0.877, 0.74, 0.65, 0.588] })
interest_value publication_date
0 1.219 2012-07-03
1 1.061 2012-08-02
2 0.877 2012-09-04
3 0.740 2012-10-02
4 0.650 2012-11-03
5 0.588 2012-12-04
在SAS中我会创建一个自定义间隔,(我们称之为INTEREST_INTERVAL)。它将包含每个权益有效的期间(即BEGIN日期和结束日期)。对于上面的示例,间隔将如下:
BEGIN END
03JUL12 01AUG12
02AUG12 03SEP12
04SEP12 01OCT12
02OCT12 02NOV12
03NOV12 03DEC12
我会使用INTNX功能。 INTNX允许在我的自定义时间间隔内“移动”多个时段,然后返回时段开始日期或结束日期。 在这种情况下,我会使用:
pub_date = INTNX(INTEREST_INTERVAL, reference_date, 0 , 'BEGINNING')
这将指示在参考日期添加零间隔并返回间隔的开始日期。 例如,如果reference_date等于'2012-09-02',则上述函数将返回02AUG12。然后我会在'publication_date'/'interest_value'表上进行直接查找(字典搜索),以获得当天的有效利率。
我认为通过Panda的PeriodIndex,第二列利率值,我可以做类似的事情,但我找不到:
在熊猫中如何做到这一点是最好的方法。
谢谢,
乙
答案 0 :(得分:0)
我的建议实际上比熊猫更蟒蛇。想一想,如果你的日期是你想要最后一个价格的列表中的最后一个日期之后,如果它不是,那么它是否在你想要之前和之后的那个之前。这是以下代码使用的逻辑(我希望)。请让我知道这对你有没有用。
df.publication_date = pd.to_datetime(df.publication_date)
def get_interest_by_date(date):
for date_interest in zip(df.publication_date.values[::-1], df.interest_value.values[::-1]):
if date>=date_interest[0]:
return float(date_interest[1])
并测试:
get_interest_by_date(pd.to_datetime('2012-10-05'))
0.74