自定义PeriodIndex(Python / Pandas等同于SAS INTNX)

时间:2018-01-04 18:57:39

标签: python pandas datetime

我有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,第二列利率值,我可以做类似的事情,但我找不到:

  • 如何创建自定义PeriodIndex?
  • 从特定日期值(reference_date)返回与其落入的时间段对应的行?

在熊猫中如何做到这一点是最好的方法。

谢谢,

1 个答案:

答案 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