Pandas-用随机正态变量填充Pandas列,并使用另一列的平均值

时间:2019-02-01 14:01:11

标签: python pandas numpy

我有如下数据:

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在这里有用吗?任何帮助将不胜感激。

3 个答案:

答案 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