You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python return中嵌入if-else,复现SQL 30/360计息CASE WHEN逻辑?

30/360计息基准下的应计利息Python函数实现

需求背景

要把SQL中30/360计息基准的日期处理逻辑整合到现有Python函数中:

  • 报表日(ReportDate)日数>30时取30,否则取当日数值
  • 起始日(StartDate)日数>30时取30,否则取当日数值
    同时保持原函数if/elif/else搭配return的结构,在return内部用三元表达式复现SQL的CASE WHEN逻辑。

对应的SQL核心日期处理片段:

+ CASE WHEN DAY(ReportDate) > 30 THEN 30 ELSE DAY(ReportDate) END
- CASE WHEN DAY(StartDate) > 30 THEN 30 ELSE DAY(StartDate) END

修改后的完整函数

# Accrued Calc for 30/360 Basis 
def accrued_30_360(row):
    # 应用30/360规则处理日数
    report_day = 30 if Settlement.day > 30 else Settlement.day
    start_day = 30 if row['Start Date DAY'] > 30 else row['Start Date DAY']
    
    # 计算计息天数占比(30/360基准)
    days_ratio = (360 * (Settlement.year - row['Start Date YEAR']) 
                  + 30 * (Settlement.month - row['Start Date MONTH']) 
                  + report_day 
                  - start_day) / 360
    
    if row['Type'] == 'L' and row['Current Filter'] == 'Current CF':
        return 1 * row['Principal/GrossAmount'] * (row['All in Rate'] / 100) * days_ratio
    elif row['Type'] == 'D':
        return -1 * row['Principal/GrossAmount'] * (row['All in Rate'] / 100) * days_ratio
    else:
        return ''

关键点说明

  1. 日期规则映射:用Python三元表达式直接对应SQL的CASE WHEN,逻辑完全一致,写法简洁。
  2. 代码冗余优化:把重复的计息天数计算抽成变量days_ratio,避免两处return语句里写重复代码,同时修正了原函数中未闭合的括号问题。
  3. 逻辑对齐SQL:严格按照SQL公式实现计息天数计算,保证结果和SQL输出一致。

内容的提问来源于stack exchange,提问作者Raj Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:15:28