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

如何在Python嵌套循环中添加迭代器且不新增额外循环?

问题:嵌套循环中整合日期迭代逻辑的优化方案

我想在现有嵌套循环里加入日期迭代逻辑,但不想新增额外循环。End是我的日期天数列表,它的长度和year的长度一致。另外,把日期字段添加到DataFrame data1中是不是更优的解决方案?

数据示例

state_list = ['A','B','C','D','E'] # 可选状态列表

data1 = pd.DataFrame({"cust_id": ['x111','x112'], # 客户数据
                    "state": ['B','E'],
                    "amount": [1000,500],
                    "year":[3,2],
                    "group":[10,10],
                    "loan_rate":[0.12,0.13]})

data1['state'] = pd.Categorical(data1['state'], 
                                        categories=state_list, 
                                        ordered=True).codes


lookup1 = pd.DataFrame({'year': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                    'lim %': [0.1, 0.1, 0.1, 0.1, 0.1,0.1, 0.1, 0.1, 0.1, 0.1]}).set_index(['year'])

matrix_data = np.arange(250).reshape(10,5,5) # 按年份(1-10)和状态(A-E)划分的3维矩阵

end = pd.Timestamp(year=2021, month=9, day=1)    # 生成日期列表
df = pd.DataFrame({"End": pd.date_range(end, periods=10, freq="M")})
df['End']=df['End'].dt.day
End=df.values

当前计算逻辑

results={}
for cust_id, state, amount, start, group, loan_rate in data1.itertuples(name=None, index=False):
    res = [amount * matrix_data[start-1, state, :]]
    for year in range(start+1, len(matrix_data)+1,):
        res.append(lookup1.loc[year].iat[0] * np.array(res[-1]))
        res.append(res[-1] * (loan_rate)) # 这里需要加入*(End/365)的日期迭代逻辑
        res.append(res[-1]+ 100)
        res.append(multi_dot([res[-1],matrix_data[year-1]]))
        results[cust_id] = res

预期输出示例

{'x111': [array([55000, 56000, 57000, 58000, 59000]),
  array([5500., 5600., 5700., 5800., 5900.]),
  array([56.055, 57.074, 58.093, 59.112., 60.132.]),
  ...

关键计算说明

第3行的计算规则为:(数组元素 * loan_rate) * (对应End日期天数/365),例如示例中的((5500 * 0.12) * (30/365))。需要将数组array([5500., 5600., 5700., 5800., 5900.])整体乘以loan_rate * (对应End天数/365)的乘积。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:10:49