2014-11-24 40 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