gpt4 book ai didi

python - Pandas 中的 "Modified following"个工作日

转载 作者:行者123 更新时间:2023-11-28 17:11:06 26 4
gpt4 key购买 nike

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

背景

在金融领域,固定 yield 息票通常是在“修改后”的基础上支付的,也就是说,如果息票日期是周末或节假日,则在下一个工作日支付,除非所说的下一个工作日属于下一个日历月,在这种情况下,我们会倒退到最近的前一个工作日

     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 月)。

我需要一次为数千个日期执行此操作,因此我希望它被矢量化并尽可能高效地使用 pandas(也就是说,我想避免只通过 if-then- 运行每个日期别的)。因此,给定一个日期向量,它会检查哪个日期落在周六/周日并自动应用规则,输出一个“修改后的”日期向量。

最佳答案

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

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 月:

dates = pd.date_range('4/1/2017', '4/30/2017')

payment_day(dates)
# DatetimeIndex(['2017-04-03', '2017-04-03', '2017-04-03', '2017-04-04',
# '2017-04-05', '2017-04-06', '2017-04-07', '2017-04-10',
# '2017-04-10', '2017-04-10', '2017-04-11', '2017-04-12',
# '2017-04-13', '2017-04-14', '2017-04-17', '2017-04-17',
# '2017-04-17', '2017-04-18', '2017-04-19', '2017-04-20',
# '2017-04-21', '2017-04-24', '2017-04-24', '2017-04-24',
# '2017-04-25', '2017-04-26', '2017-04-27', '2017-04-28',
# '2017-04-28', '2017-04-28'],
# dtype='datetime64[ns]', freq='D')

payment_day(dates).weekday_name
# Index(['Monday', 'Monday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
# 'Friday', 'Monday', 'Monday', 'Monday', 'Tuesday', 'Wednesday',
# 'Thursday', 'Friday', 'Monday', 'Monday', 'Monday', 'Tuesday',
# 'Wednesday', 'Thursday', 'Friday', 'Monday', 'Monday', 'Monday',
# 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Friday', 'Friday'],
# dtype='object')

另请参阅:Custom Business Day从文档。请对此进行压力测试;我基本上只使用默认的 BDay,不确定联邦假期是否与 NYSE 市场收盘完全一致。

关于python - Pandas 中的 "Modified following"个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47372138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com