迭代数据帧以在python中生成随机数

时间:2014-11-24 20:41:00

标签: python python-2.7 pandas scipy

从这个数据帧开始,我想使用loc的hmean列和缩放的hstd列生成100个随机数

我从一个数据框开始,我将其更改为数组。我想迭代整个数据框并产生以下输出。

下面的代码只会返回第零行的答案。

     Name      amax        hmean       hstd         amin
0    Bill    22.924545   22.515861   0.375822    22.110000
1    Bob     26.118182   24.713880   0.721507    23.738400
2    Becky   23.178606   22.722464   0.454028    22.096752

此代码提供一行输出,而不是三行

from scipy import stats
import pandas as pd

def h2f(df, n):
    for index, row in df.iterrows(): 
        list1 = []
        nr = df.as_matrix()
        ff = stats.norm.rvs(loc=nr[index,2], scale=nr[index,3], size = n)
        list1.append(ff)
     return list1

df2 = h2f(data, 100)
pd.DataFrame(df2)

这是我的代码

的输出
0       1          2        3         4      ...    99         100            
0   22.723833 22.208324  22.280701 22.416486     22.620035   22.55817   

这是所需的输出

0         1         2            3      ...     99         100            
0   22.723833    22.208324   22.280701       22.416486  22.620035    
1   21.585776    22.190145   22.206638       21.927285  22.561882
2   22.357906    22.680952   21.4789         22.641407  22.341165           

1 个答案:

答案 0 :(得分:1)

Dedent return list1所以它不在for循环中。 否则,只有一次通过循环后,函数才会返回。

同时将list1 = []移到for-loop之外,这样list1每次通过循环都不会重新初始化:

import io
from scipy import stats
import pandas as pd

def h2f(df, n):
    list1 = []
    for index, row in df.iterrows(): 
        mean, std = row['hmean'], row['hstd']
        ff = stats.norm.rvs(loc=mean, scale=std, size=n)
        list1.append(ff)
    return list1

content = '''\
     Name      amax        hmean       hstd         amin
0    Bill    22.924545   22.515861   0.375822    22.110000
1    Bob     26.118182   24.713880   0.721507    23.738400
2    Becky   23.178606   22.722464   0.454028    22.096752'''

df = pd.read_table(io.BytesIO(content), sep='\s+')
df2 = pd.DataFrame(h2f(df, 100))
print(df2)

PS。每次通过循环调用nr = df.as_matrix()是无效的。 由于nr永远不会更改,因此在输入for-loop之前最多只调用一次。 更好的是,只需使用row['hmean']row['hstd']即可获得所需的数字。