从这个数据帧开始,我想使用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
答案 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']
即可获得所需的数字。