簡體   English   中英

遍歷數據幀以在python中生成隨機數

[英]Iterate through data frame to generate random number in python

從這個數據幀開始,我想使用hmean列作為loc並使用hstd列作為scale來生成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           

確定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永遠不會改變,因此最多nr在進入for-loop之前調用一次。 更好的是,只需使用row['hmean']row['hstd']即可獲得所需的數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM