【问题标题】:Iterate through data frame to generate random number in python遍历数据框以在python中生成随机数
【发布时间】:2015-01-22 16:37:25
【问题描述】:

从这个数据框开始,我想生成 100 个随机数,使用 hmean 列表示 loc,hstd 列表示 scale

我从一个数据框开始,我将其更改为一个数组。我想遍历整个数据框并产生以下输出。

我下面的代码只会返回第 0 行的答案。

     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           

【问题讨论】:

    标签: python python-2.7 pandas scipy


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

    【讨论】:

    • 仍然只返回一行。
    • 这是由于 list1 = [] 在 for 循环中。在输入for-loop之前定义一次就可以了。
    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多