如何基于指定放款规则使用Pandas填充月度资金付款计划表
实现方案
核心思路
将放款规则与业务处理逻辑分离,通过可配置的字典存储不同用户的放款规则,后续规则调整、新增用户仅需修改配置字典即可,无需改动核心处理代码。
完整实现代码
import pandas as pd import numpy as np # 1. 基础数据构造(对应读取CSV后的初始结构) names = ['john', 'pete', 'jack'] funds = [1000, 3600, 2390] df = pd.DataFrame({'Name': names, 'Fund': funds}) # 批量生成m1-m12列,避免逐行硬编码赋值 for i in range(1, 13): df[f'm{i}'] = np.nan # 2. 放款规则配置(仅需修改此处即可适配规则变更) # 规则格式:用户名: (起始发放月份序号, 连续发放月数, 每月发放占总资金比例) # 注:m1对应月份序号1,比如从m2开始发放则起始序号填2 rule_config = { "john": (2, 10, 0.1), "pete": (3, 8, 0.125), "jack": (5, 5, 0.2) } # 3. 核心处理逻辑 month_cols = [f'm{i}' for i in range(1, 13)] # 统一管理月度列名 for idx, row in df.iterrows(): user = row['Name'] if user not in rule_config: continue # 无匹配规则的用户跳过,保持NaN start_month_idx, months, rate = rule_config[user] # 计算单月发放金额 monthly_pay = row['Fund'] * rate # 匹配要赋值的列范围:起始索引为start_month_idx-1(列表从0开始计数) target_cols = month_cols[start_month_idx-1 : start_month_idx-1 + months] df.loc[idx, target_cols] = monthly_pay # 输出结果验证 print(df)
输出结果
运行上述代码后输出的df完全符合预期:
Name Fund m1 m2 m3 m4 m5 m6 m7 m8 m9 m10 m11 m12 0 john 1000 NaN 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 NaN 1 pete 3600 NaN NaN 450.0 450.0 450.0 450.0 450.0 450.0 450.0 450.0 NaN NaN 2 jack 2390 NaN NaN NaN NaN 478.0 478.0 478.0 478.0 478.0 NaN NaN NaN
灵活适配说明
- 新增用户仅需在
rule_config中新增对应键值对即可 - 调整用户放款规则直接修改对应用户的元组参数即可,无需修改处理逻辑
- 若后续月度列数调整(比如扩展到m24),仅需修改生成月度列、定义
month_cols的范围参数即可
内容的提问来源于stack exchange,提问作者Diop Chopra
相关产品推荐
相关产品推荐

