[英]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.