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

如何在Pandas中生成每行单元格值为上一行+独立随机偏差的DataFrame

解决Pandas DataFrame中每个单元格独立添加随机偏差的问题

你的问题出在当前代码里,random.randint(-max_deviation, max_deviation)只会生成单个整数,所以整行的所有列都会加上同一个偏差值。要让每个单元格有独立的变化,只需要给每一列生成各自的随机偏差即可,下面是两种实用的实现方式:

方法1:纯Python列表推导式

适合列数较少的场景,直接为每个列生成独立的随机数:

import pandas as pd, random
max_deviation = 20
nb_periods = 5
colnames = ["col1", "col2"]
df = pd.DataFrame(columns = colnames)
df.loc[0] = 500
for id_period in range(1, nb_periods):
    # 为每个列生成专属的随机偏差
    deviations = [random.randint(-max_deviation, max_deviation) for _ in colnames]
    df.loc[id_period] = df.loc[id_period-1] + deviations
print(df)

运行后会得到类似你期望的结果:

col1  col2
0   500   500
1   485   503
2   479   522
3   479   511
4   496   494

方法2:使用Numpy生成随机数组

如果你的DataFrame列数较多,用Numpy生成随机数组会更高效:

import pandas as pd
import numpy as np

max_deviation = 20
nb_periods = 5
colnames = ["col1", "col2"]
df = pd.DataFrame(columns = colnames)
df.loc[0] = 500
for id_period in range(1, nb_periods):
    # 生成与列数匹配的随机整数数组
    deviations = np.random.randint(-max_deviation, max_deviation + 1, size=len(colnames))
    df.loc[id_period] = df.loc[id_period-1] + deviations
print(df)

核心逻辑说明

两种方法的本质都是为每一列生成独立的随机偏差值,而不是复用同一个标量。这样每行的每个单元格都会基于上一行对应位置的值,加上独有的随机偏差,完美实现你想要的效果。

内容的提问来源于stack exchange,提问作者François M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:31:01