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

如何基于DataFrame实现示例所示的迭代计算?求参考链接

迭代计算DataFrame的正确实现方法

需求规则

  • df2的第0行完全沿用df1的第0行数据
  • 从第1行开始,df2每行的每个值遵循公式:df2.iloc[i] = df1.iloc[i] * 2 + df2.iloc[i-1] * 1

示例数据

df1原始数据

a  b  c
0  1  0  5
1  9  9  2
2  2  2  8
3  6  3  0
4  6  1  7

目标df2结果

a   b   c
0  1   0   5  # 取自df1第0行
1  19  18  9  # 计算逻辑:(9*2)+1=19,(9*2)+0=18,(2*2)+5=9
2  23  22  25 # 计算逻辑:(2*2)+19=23,(2*2)+18=22,(8*2)+9=25
3  35  28  25 # 计算逻辑:(6*2)+23=35,(3*2)+22=28,(0*2)+25=25
4  47  30  39 # 计算逻辑:(6*2)+35=47,(1*2)+28=30,(7*2)+25=39

原有代码问题分析

你之前的代码里,循环内的公式错误地将df2.values[i-1]的乘数设为3,不符合需求里的×1规则,这是导致结果错误的核心原因。

原有代码:

import pandas as pd

df1 = pd.DataFrame({'a': [1,9,2,6,6], 'b': [0,9,2,3,1], 'c': [5,2,8,0,7]})
df2 = pd.DataFrame(index=df1.index, columns=df1.columns)
df2.iloc[0] = df1.iloc[:1]
size = len(df1.index)

for i in range(1,size):
    df2.values[i] = ((df1.values[i] * 2) +  (df2.values[i-1] * 3))  # 此处乘数3错误,应为1

正确实现方法

方法1:修正循环逻辑

直接修正公式中的乘数,同时简化赋值方式:

import pandas as pd

df1 = pd.DataFrame({'a': [1,9,2,6,6], 'b': [0,9,2,3,1], 'c': [5,2,8,0,7]})
df2 = df1.copy()  # 直接复制第0行,无需单独赋值

for i in range(1, len(df1)):
    df2.iloc[i] = df1.iloc[i] * 2 + df2.iloc[i-1]

print(df2)

运行后会输出符合要求的df2结果。

方法2:向量化实现(无显式循环)

将问题转化为累积权重计算,避免循环提升效率,适合大数据量场景:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'a': [1,9,2,6,6], 'b': [0,9,2,3,1], 'c': [5,2,8,0,7]})

n = len(df1)
# 构造权重矩阵:每行i对应df1行j的权重为2*1^(i-j)(j<=i),第一行仅df1[0]权重为1
weights = np.array([[2 * (1 ** (i - j)) if j <= i else 0 for j in range(n)] for i in range(n)])
weights[0,0] = 1

df2 = pd.DataFrame(df1.values.T @ weights.T, index=df1.index, columns=df1.columns)
print(df2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:50:31