我有一个过程,我运行在一个木星笔记本,在其中一个步骤,一个计算,基本上是说什么数额的贷款,并分散了多年来,每天。因此,假设一笔贷款从'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)
发布于 2022-01-11 09:18:35
这个怎么样:
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)‘)作为键来计算其余部分。如果这不是您所需要的,也许您可以给我们一些源数据和期望的输出。
https://stackoverflow.com/questions/70660710
复制相似问题