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

基于DataFrame中均值与标准差生成正态分布随机数的问题求助

问题分析与解决

你的代码存在两个核心问题:

  • enumerate(df)遍历的是DataFrame的列名,拿到的mean是列的索引(0-4),std是列名(1-5),完全不是你需要的均值和标准差数值。
  • np.random.normal的size参数设为[5,1000]会生成5行1000列的数组,和你“列数与原df相同、行数更多”的需求不符。

正确实现方法

先导入numpy(你原代码遗漏了这个依赖),然后遍历每一列获取对应均值和标准差,生成指定行数的随机数,最后组合成目标DataFrame:

import pandas as pd
import numpy as np

# 原DataFrame
df = pd.DataFrame({
    1: {'mean': 1.0, 'std': 0.8},
    2: {'mean': 0.5, 'std': 0.2},
    3: {'mean': 0.2, 'std': 0.1},
    4: {'mean': 0.1, 'std': 0.1},
    5: {'mean': 0.6, 'std': 0.2}
})

# 设定要生成的行数,可根据需求修改
num_rows = 1000
full_noise_data = {}

# 遍历原df的每一列
for col in df.columns:
    # 获取当前列的均值和标准差
    mean_val = df.loc['mean', col]
    std_val = df.loc['std', col]
    # 生成对应行数的正态分布随机数
    noise = np.random.normal(loc=mean_val, scale=std_val, size=num_rows)
    # 将数据存入字典,键为原列名
    full_noise_data[col] = noise

# 转换为最终的DataFrame
full_noise_df = pd.DataFrame(full_noise_data)

代码说明

  • 用df.columns遍历原DataFrame的列,保证新df的列名与原数据完全一致。
  • 通过df.loc['mean', col]和df.loc['std', col]精准提取每一列的统计值。
  • np.random.normal的size=num_rows生成一维数组,刚好对应DataFrame的一列,行数由你自定义。

如果想简化代码,也可以用字典推导式一行完成:

full_noise_df = pd.DataFrame({
    col: np.random.normal(df.loc['mean', col], df.loc['std', col], 1000)
    for col in df.columns
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:10:57