使用for循环从多个列表创建列名

时间:2020-07-24 17:03:46

标签: python pandas list for-loop

说我有多个列表:

names1 = [name11, name12, etc]
names2 = [name21, name22, etc]
names3 = [name31, name32, etc]

如何创建一个for循环,以按顺序组合列表的组成部分(“ name11name21name31”,“ name11name21name32”等)?

在将列添加到数据框中时,我想用它来命名列。我这样尝试过:

Results['{}' .format(model_names[j]) + '{}' .format(Data_names[i])] = proba.tolist()

我试图获取一些作为数组获得的结果,并在数据帧中逐一介绍它们,并在继续进行操作时给列名称命名。这是我要建立的机器学习模型。

这是完整的代码,因为我是一个初学者,所以我确定它是一团糟。

    Train = [X_train_F, X_train_M, X_train_R, X_train_SM]
    Test = [X_test_F, X_test_M, X_test_R, X_test_SM]
    models_to_run = [knn, svc, forest, dtc]
    
    model_names = ['knn', 'svc' ,'forest', 'dtc']
    Data_names = ['F', 'M', 'R', 'SM']
    
    Results = pd.DataFrame()

for T, t in zip(Train, Test):
for j, model in enumerate(models_to_run):
    model.fit(T, y_train.values.ravel())
    proba = model.predict_proba(t)
    proba = pd.DataFrame(proba.max(axis=1))
    proba = proba.to_numpy()
    proba = proba.flatten()
    Results['{}' .format(model_names[j]) + '{}' .format(Data_names[i])] = proba.tolist()

我不知道如何在循环中集成“ i”,如何使用它遍历列表Data_names并将其添加到列名。我敢肯定有一种更干净的方法可以做到这一点。请保持温柔。

编辑:它现在为我提供了一个包含4列而不是16列的数据框,它只是将整个Data_names列表添加到列名中。

1 个答案:

答案 0 :(得分:0)

如何: Results= {}

for T, t, dname in zip(Train, Test, Data_names):

for mname, model in zip(model_names, models_to_run):

...

Results[(dname, mname)] = proba.to_list()

Results = pd.DataFrame(Results.values(), index=Results.keys()).T