[英]How to get date range for a specific month starting with a previous month using Pandas
我正在尝试为未来给定的月份建立一个“发薪日”列表,只知道发薪日是在几个月前开始的。 例如:
因此,如果我想知道 3 月的哪些日期是发薪日,我必须从 2023 年 1 月 6 日开始并添加两周,直到我到达 3 月才能知道 3 月的第一个发薪日是 3/3/2/ 2023.
然后我希望我的最终日期列表只是那些三月的日期:
(3/3/2023, 3/17/2023, 3/31/2023)
我知道我可以使用 pandas 来做类似的事情:
pd.date_range(starting_date, starting_date+relativedelta(months=1), freq='14d')
但它会包括回溯到 2023 年 1 月 6 日的每个日期。
此处最简单的做法是将 starting_date 参数更新为您感兴趣的月份的第一个发薪日。
为此,您可以使用此 function,它通过首先找到您的开始日期和所需月份之间的差异来找到给定月份的第一个发薪日。
# month is the number of the month (1-12)
def get_first_pay_day_in_month(month=datetime.datetime.now().month,
year=datetime.datetime.now().year,
start_date=datetime.datetime(2023, 1, 6),
):
diff = datetime.datetime(year, month, 1) - start_date
freq = 14
if diff.days % freq == 0:
print(f'Difference: {diff.days/freq} weeks')
return datetime.datetime(year,month,1)
else:
print(f'Difference: {diff.days} days')
print(f'Days: {diff.days % freq} extra')
return datetime.datetime(year,month,1 + 14 - (diff.days % freq))
然后您可以使用此 function 获取特定月份的第一个发薪日并将其插入 date_range 方法。
from dateutil import relativedelta
starting_date = get_first_pay_day_in_month(month=3)
pay_days = pd.date_range(starting_date, starting_date+relativedelta.relativedelta(months=1), freq='14d')
print(pay_days)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.