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

如何为DataFrame每行按月份区间生成独立随机数更新eta列

解决DataFrame每行独立生成随机数相乘的问题

你的代码问题在于random.uniform(1,2)只会生成单个随机数,所有符合1-3月条件的行都会乘同一个值,无法实现每行独立随机的需求。

解决方案:用NumPy生成对应长度的随机数数组

使用np.random.uniform()可以一次性生成和目标行数量一致的独立随机数,直接和对应行的eta列相乘:

import pandas as pd
import numpy as np

# 转换日期列
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')

# 筛选1-3月的行
mask = df['Date'].dt.month.isin((1, 2, 3))
# 生成与筛选结果行数相同的随机数数组(每个数在1-2之间),并完成乘法
df.loc[mask, 'eta'] *= np.random.uniform(1, 2, size=mask.sum())

多月份区间的扩展处理

如果需要给不同月份区间设置不同的随机数范围,只需重复上述逻辑即可:

# 1-3月:随机数1-2
mask1 = df['Date'].dt.month.isin((1,2,3))
df.loc[mask1, 'eta'] *= np.random.uniform(1, 2, size=mask1.sum())

# 4-6月:随机数0.8-1.2
mask2 = df['Date'].dt.month.isin((4,5,6))
df.loc[mask2, 'eta'] *= np.random.uniform(0.8, 1.2, size=mask2.sum())

# 其他月份同理

为什么不用apply?

虽然可以用df.loc[mask, 'eta'].apply(lambda x: x * random.uniform(1,2))实现,但apply是逐行处理,在数据量较大时效率远低于NumPy的向量式操作,优先推荐前者。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:04:59