我有如下数据:
Mean
4.5
5.6
3.5
6.7
我想做的是使用np.random.normal()
使用均值列构建随机正态变量,该均值列会生成类似这样的内容(显然,随机数每次都会有所不同):
Mean RV
4.5 6.2
5.6 3.1
3.5 4.3
6.7 5.6
我尝试过这样的事情:
df['RV'] = np.random.normal(df['Mean'], 3.2, 1)
但是不成功。也许lambda
在这里有用吗?任何帮助将不胜感激。
答案 0 :(得分:1)
您可以将np.random.normal
应用于系列的值,并使用每个值作为正态分布的平均值。更新与@jpp建议的代码,作为使用import os
import time
os.system("ipconfig /release")
time.sleep(5)
os.system("ipconfig /renew")
功能是没有必要在这里给出的是,平均是第一参数的函数有:
lambda
答案 1 :(得分:1)
直接使用np.random.normal
来利用numpy的矢量运算要比使用熊猫的apply
函数要快得多:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'Mean': np.arange(0., 1000000., 1.),
'StdDev': np.arange(0., 1000000., 1.)/1000000. + 1.,
})
df['RV'] = np.random.normal(loc=df['Mean'], scale=df['StdDev'])
对于具有100万行的数据帧,此方法在我的计算机上运行大约60毫秒,而套用方法则为2秒,即快30倍。
对于您的情况,我看不出任何理由无法解决。
答案 2 :(得分:0)
将列传递到np.random.normal
以提高性能:
df['RV'] = np.random.normal(df['Mean'])
print (df)
Mean RV
0 4.5 4.138135
1 5.6 6.285609
2 3.5 4.073761
3 6.7 6.987728