基于随机浮点数创建Pandas DataFrame状态列的实现问题
解决方案
先明确完整的状态转移逻辑(结合你代码里的参数补充):
- 当上一行状态为1时:
- 若对应随机值 <
pww→ 当前状态为1 - 否则 → 当前状态为0
- 若对应随机值 <
- 当上一行状态为0时:
- 若对应随机值 <
pdw→ 当前状态为1 - 否则 → 当前状态为0
- 若对应随机值 <
下面是具体实现代码,核心是通过迭代逐行计算状态,直接引用前一行的状态值:
import numpy as np import pandas as pd # 固定参数(可替换为input输入) pww = 0.7 pdd = 0.3 pwd = 1 - pww pdw = 1 - pdd # 生成随机数DataFrame randomdf = pd.DataFrame({ "Random 1": np.random.rand(3650), "Random 2": np.random.rand(3650) }) # 初始化状态列,第一行状态为1 randomdf['State'] = 0 randomdf.loc[0, 'State'] = 1 # 从第二行开始逐行计算状态 for i in range(1, len(randomdf)): prev_state = randomdf.loc[i-1, 'State'] current_random = randomdf.loc[i, 'Random 1'] # 这里用Random 1,可根据需求换Random 2 if prev_state == 1: # 上一行是1,判断是否保持1 randomdf.loc[i, 'State'] = 1 if current_random < pww else 0 else: # 上一行是0,判断是否转为1 randomdf.loc[i, 'State'] = 1 if current_random < pdw else 0
关键说明:
- 通过
randomdf.loc[i-1, 'State']直接获取前一行的状态值,这是实现依赖前一行逻辑的核心。 - 如果需要用
Random 2来判断,只需要把current_random的取值换成randomdf.loc[i, 'Random 2']即可。 - 若处理超大数据量想提效,可改用
pandas向量化操作结合shift(),但3650行的规模下,循环足够直观且效率达标。
内容的提问来源于stack exchange,提问作者Lawrence
相关产品推荐
相关产品推荐

