Python-创建多个列表和zip

Python-创建多个列表和zip,python,list,for-loop,zip,Python,List,For Loop,Zip,我期待着根据同一个函数生成多个列表,该函数根据列表随机化数据。我希望能够轻松地更改我想要的这些新列表的数量,然后将它们合并。创建每个列表的代码如下所示: """ """ R_ensemble=[] for i in range(0,len(R)): if R[i]==0: R_ensemble.append(0) else:

我期待着根据同一个函数生成多个列表,该函数根据列表随机化数据。我希望能够轻松地更改我想要的这些新列表的数量,然后将它们合并。创建每个列表的代码如下所示:

    """ 
    """
    R_ensemble=[]
    for i in range(0,len(R)):
        if R[i]==0:
            R_ensemble.append(0)
        else:
            R_ensemble.append(np.random.normal(loc=R[i],scale=R[i]/4,size=None)) 
    return R_ensemble
这会根据正态分布扰动列表中的每个值

当我只需要几个列表时,可以将它们组合在一起:

    """
    """
    ensemble_form_1,ensemble_form_2,ensemble_form_3 = [],[],[]
    
    ensemble_form_1 = normal_transform(R)
    ensemble_form_2 = normal_transform(R)
    ensemble_form_3 = normal_transform(R)

    zipped_ensemble = list(zip(ensemble_form_1,ensemble_form_2,ensemble_form_3))
    df_ensemble = pd.DataFrame(zipped_ensemble, columns = ['Ensemble_1', 'Ensemble_2','Ensemble_3'])
    
    return ensemble_form_1, ensemble_form_2, ensemble_form_3
我如何重复同样的随机过程来创建固定数量的列表(比如50或100),然后将它们组合成一个表?有没有一种简单的方法可以使用for循环或任何其他方法来实现这一点?我需要能够单独选择每个新列表/列,因为我将以某种方式组合结果

非常感谢您的帮助。

您可以使用
zip()
*
创建列数可变的数据框。例如:

import pandas as pd


def generate_list(n):
    #... generate your list here
    return [*range(n)]

def get_dataframe(n_columns, n):
    return pd.DataFrame(zip(*[generate_list(n) for _ in range(n_columns)]), columns=['Ensemble_{}'.format(i) for i in range(1, n_columns+1)])

print(get_dataframe(8, 10))
打印(8列,10行):

您可以将
zip()
*
一起使用来创建列数可变的数据帧。例如:

import pandas as pd


def generate_list(n):
    #... generate your list here
    return [*range(n)]

def get_dataframe(n_columns, n):
    return pd.DataFrame(zip(*[generate_list(n) for _ in range(n_columns)]), columns=['Ensemble_{}'.format(i) for i in range(1, n_columns+1)])

print(get_dataframe(8, 10))
打印(8列,10行):


您可以构造多个列表和如下所示的表:

import pandas as pd
import numpy as np

# Your function for creating the individual lists
def normal_transform(R):
    R_ensemble=[]
    for i in range(0,len(R)):
        if R[i]==0:
            R_ensemble.append(0)
        else:
            R_ensemble.append(np.random.normal(loc=R[i],scale=R[i]/4,size=None))
    return R_ensemble

# Construction of multiple lists and the dataframe
NUM_LISTS = 50
R = list(range(100))

data = dict()
for i in range(NUM_LISTS):
    data['Ensemble_' + str(i)] = normal_transform(R)
df_ensemble = pd.DataFrame(data)
df_ensemble['Ensemble_42']
df_ensemble[df_ensemble.columns[42]]
您可以访问单独的列表/列,如下所示:

import pandas as pd
import numpy as np

# Your function for creating the individual lists
def normal_transform(R):
    R_ensemble=[]
    for i in range(0,len(R)):
        if R[i]==0:
            R_ensemble.append(0)
        else:
            R_ensemble.append(np.random.normal(loc=R[i],scale=R[i]/4,size=None))
    return R_ensemble

# Construction of multiple lists and the dataframe
NUM_LISTS = 50
R = list(range(100))

data = dict()
for i in range(NUM_LISTS):
    data['Ensemble_' + str(i)] = normal_transform(R)
df_ensemble = pd.DataFrame(data)
df_ensemble['Ensemble_42']
df_ensemble[df_ensemble.columns[42]]

您可以构造多个列表和如下所示的表:

import pandas as pd
import numpy as np

# Your function for creating the individual lists
def normal_transform(R):
    R_ensemble=[]
    for i in range(0,len(R)):
        if R[i]==0:
            R_ensemble.append(0)
        else:
            R_ensemble.append(np.random.normal(loc=R[i],scale=R[i]/4,size=None))
    return R_ensemble

# Construction of multiple lists and the dataframe
NUM_LISTS = 50
R = list(range(100))

data = dict()
for i in range(NUM_LISTS):
    data['Ensemble_' + str(i)] = normal_transform(R)
df_ensemble = pd.DataFrame(data)
df_ensemble['Ensemble_42']
df_ensemble[df_ensemble.columns[42]]
您可以访问单独的列表/列,如下所示:

import pandas as pd
import numpy as np

# Your function for creating the individual lists
def normal_transform(R):
    R_ensemble=[]
    for i in range(0,len(R)):
        if R[i]==0:
            R_ensemble.append(0)
        else:
            R_ensemble.append(np.random.normal(loc=R[i],scale=R[i]/4,size=None))
    return R_ensemble

# Construction of multiple lists and the dataframe
NUM_LISTS = 50
R = list(range(100))

data = dict()
for i in range(NUM_LISTS):
    data['Ensemble_' + str(i)] = normal_transform(R)
df_ensemble = pd.DataFrame(data)
df_ensemble['Ensemble_42']
df_ensemble[df_ensemble.columns[42]]

这正是我想要的,在删除行R=list(范围(100))之后。非常感谢您,这很有帮助:)这正是我想要的,在删除了行R=list(范围(100))之后。非常感谢您,这很有帮助:)