【问题标题】:Creating column names from multiple lists using for loop使用 for 循环从多个列表中创建列名
【发布时间】:2020-11-14 14:17:02
【问题描述】:

假设我有多个列表:

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

如何创建一个按顺序组合列表组件('name11name21name31'、'name11name21name32' 等)的 for 循环?

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

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 列表添加到列名中。

【问题讨论】:

    标签: python pandas list for-loop


    【解决方案1】:

    怎么样: 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

    【讨论】:

    • 是的,这似乎奏效了。需要注意的是,它应该是不带 _ 的 .tolist,为了得到我想要的结果,我写了 Results[(dname + mname)],这样它就给了我由列表组件组成的标题。你给我的东西很棒,这正是我原则上所需要的。非常感谢!
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2013-09-09
    • 2020-07-27
    相关资源
    最近更新 更多