2014-11-24 41 views
0

随机数与此数据帧我想用的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

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']即可获得所需的数字。

+0

仍然只返回一行。 – Erich 2014-11-24 21:08:15

+0

这是由于'list1 = []'在for循环中。在进入'for-loop'之前定义一次,然后它就可以工作。 – unutbu 2014-11-24 21:31:15