如何在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.
相关产品推荐
相关产品推荐

