“修改后的”Pandas工作日

2024-06-26 14:33:11 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在Pandas中有效地实现“修改后的”工作日付款规则的矢量化版本?在

背景

在金融领域,固定收益优惠券通常是在“修改后”的基础上支付的,也就是说,如果息票日在周末或假日,则在下一个营业日支付,除非下一个营业日是下一个日历月,在这种情况下,我们倒着去最近的一天。在

     April 2017       
Su Mo Tu We Th Fr Sa  
                   1  
 2  3  4  5  6  7  8  
 9 10 11 12 13 14 15  
16 17 18 19 20 21 22  
23 24 25 26 27 28 29  
30 

2017年4月就是一个很好的例子。如果付款在星期六15号,它将被提前到星期一17号。然而,如果它落在两周后的29号星期六,它将向后移到28号星期五(因为下一个星期一是在5月)。在

我需要一次处理数千个日期,因此我希望它是向量化的,如果可能的话,熊猫是高效的(也就是说,我希望避免每次约会都使用if-then-else)。因此,给定一个日期向量,它将检查哪个是在Sat/Sun,并自动应用规则,输出一个“modified following”日期的向量。在


Tags: 版本pandas规则情况收益向量基础矢量化
1条回答
网友
1楼 · 发布于 2024-06-26 14:33:11

如果您对熊猫解决方案感兴趣,这是一个开始:

import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay

BDayUS = CustomBusinessDay(calendar=USFederalHolidayCalendar())       

def is_weekday(dates):
    return ~dates.weekday_name.isin(['Saturday', 'Sunday'])

def in_next_month(dates1, dates2):
    return dates1.month == dates2.month - 1

def next_bus_day(dates):
    fwd = dates + BDayUS(1)
    return fwd.where(~in_next_month(dates, fwd), dates - BDayUS(1))

def payment_day(dates):
    return dates.where(is_weekday(dates), next_bus_day(dates))

2017年4月:

^{pr2}$

另请参阅文档中的:Custom Business Day。请对此进行压力测试;我大部分时间都在处理默认BDay,不确定联邦假日是否与纽约证交所市场的收盘价完全一致。在

相关问题 更多 >