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

Pandas如何使用iloc自动化实现不同列数的批量连乘计算

Pandas自动匹配乘数列实现跨节点预测值连乘计算

原始数据

持有的DataFrame结构如下:

import pandas as pd
df = pd.DataFrame({
    'date' : ['2020-6','2020-07','2020-8'], 
    'd3_real':[1.2,1.3,0.8], 
    'd7_real' : [1.5,1.8,1.2], 
    'd14_real':[1.9,2.1,1.5],
    'd30_real' : [2.1, 2.2, 1.8],
    'd7_mul':[1.12,1.1,1.15],
    'd14_mul':[1.08, 1.1, 1.14],
    'd30_mul':[1.23,1.25,1.12]
})

列含义说明:

  • dX_real:第X天节点的实际值
  • dX_mul:对应区间的乘数系数

计算需求

计算从各前置节点推导到d30的预测值,规则为:取起始节点的实际值,依次乘上该节点之后到d30为止所有区间的乘数。
手动实现的参考代码如下:

df['d30_from_d3'] = df.iloc[:,1] * df.iloc[:,5] * df.iloc[:,6] * df.iloc[:,7]
df['d30_from_d7'] = df.iloc[:,2] * df.iloc[:,6] * df.iloc[:,7]
df['d30_from_d14'] = df.iloc[:,3] * df.iloc[:,7]

由于不同起始节点需要乘的乘数数量不一致,硬编码每列计算逻辑扩展性差,需要通过循环自动匹配每个起始节点对应的乘数范围,完成批量计算。之前尝试的嵌套循环写法逻辑错误,仅能赋值起始实际值,无法完成对应范围乘数的连乘。

实现代码

直接利用列位置的偏移关系,切片取出每个起始节点对应的后续所有乘数列,用pandas内置的按行乘积方法计算,不需要嵌套循环:

# 配置项:实际值列的索引位置、第一个乘数列的索引位置、节点名称
real_col_pos = [1, 2, 3]
first_mul_pos = 5
node_list = ['d3', 'd7', 'd14']

for i, pos in enumerate(real_col_pos):
    # 切片取当前节点之后的所有乘数列
    target_mul_cols = df.iloc[:, first_mul_pos + i :].columns
    # 计算:起始实际值 * 后续所有乘数的行乘积
    df[f'd30_from_{node_list[i]}'] = df.iloc[:, pos] * df[target_mul_cols].prod(axis=1)

逻辑说明

列位置的偏移和遍历索引完全匹配,不需要额外写条件判断:

  • 起始节点为d3(遍历索引i=0):乘数列从第5列开始取,覆盖d7_mul/d14_mul/d30_mul三列
  • 起始节点为d7(遍历索引i=1):乘数列从第6列开始取,覆盖d14_mul/d30_mul两列
  • 起始节点为d14(遍历索引i=2):乘数列从第7列开始取,覆盖d30_mul一列
    后续如果要新增d60等更长周期的节点,只需要在DataFrame中追加对应列,同时在配置项中添加对应的实际值列位置、节点名称即可,不需要修改核心计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:09:19