【问题标题】:Days Per Year Between Begin and End Date (Python)每年开始和结束日期之间的天数 (Python)
【发布时间】:2022-01-11 01:39:05
【问题描述】:

我有一个在 Juptyter 笔记本中运行的流程,其中一步,计算基本上可以说明贷款金额是多少,并将其分摊到每天的年份中。因此,假设一笔贷款从“2024-04-01”开始,到“2028-04-01”结束,它将在 2024 年(从 4 月起)和 2028 年(从年初到 4 月)应用部分应计,并且其他年份的全额。

我希望改进的地方是动态生成年度数据,而不是我目前在下面的过程中专门定义每年的方法。我想保留的是将开始/结束的年份定义为会计年度可以与日历年不同。感谢您提供任何意见,如果您看到实现我所写内容的更简单的方法,我将非常感激。

data['2024 Year Start'] = datetime.strptime('2024-01-01', '%Y-%m-%d')
data['2024 Year End'] = datetime.strptime('2024-12-31', '%Y-%m-%d')
data['2024 Days'] = pd.to datetime(data[['2024 Year End'], ['Last Loan Date']].min(axis=1)) - pd.to_datetime(data[['2024 Year Start', 'Loan From Date']].max(axis=1))
data['2024 Days'] = data['2024 Days'].astype('timedelta64[D]')-0
data['2024 Accrual'] = np.where((data['Last Loan Date'] >= data['2024 Year Start'])
            & (data['Loan From Date'] < data['2024 Year End']),
            data[ 'Daily Accrual'] * data['2024 Days'],
            0)

data['2025 Year Start'] = datetime.strptime('2025-01-01', '%Y-%m-%d')
data['2025 Year End'] = datetime.strptime('2025-12-31', '%Y-%m-%d')
data['2025 Days'] = pd.to datetime(data[['2025 Year End'], ['Last Loan Date']].min(axis=1)) - pd.to_datetime(data[['2025 Year Start', 'Loan From Date']].max(axis=1))
data['2025 Days'] = data['2025 Days'].astype('timedelta64[D]')-0
data['2025 Accrual'] = np.where((data['Last Loan Date'] >= data['2025 Year Start'])
            & (data['Loan From Date'] < data['2025 Year End']),
            data[ 'Daily Accrual'] * data['2025 Days'],
            0)

【问题讨论】:

  • 作为会计年度的开始/结束” - 由于有不同的假期等,这不是特定于国家/地区的吗?

标签: python pandas numpy datetime time-series


【解决方案1】:

这个怎么样:

from dateutil.relativedelta import relativedelta

# fiscal year settings
m_start = 3
d_start = 15

for y in range(2021,2028):
    year_start = datetime(year=y, month=m_start, day=d_start)
    year_end = year_start + relativedelta(years=1,days=-1)
    # if you like, put it in data cols
    data[str(y)+' Year Start'] = year_start
    data[str(y)+' Year End'] = year_end

如果需要,可以使用动态生成的字符串(如上面的“str(y)”)作为键来计算其余部分。如果这不是您所需要的,也许您可​​以给我们一些源数据和所需的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多