【问题标题】:Exporting a list as a new column in a pandas dataframe as part of a nested for loop作为嵌套 for 循环的一部分,将列表导出为 pandas 数据框中的新列
【发布时间】:2019-03-28 13:36:41
【问题描述】:

我正在输入包含多列数据的多个电子表格。对于每个电子表格,找到每列的最大值。然后,对于列中的每个元素,该元素除以该列的最大值。对于列中的每个元素,输出应该是一个值(介于 0 和 1 之间),按升序排列。这将附加到应作为列添加到源电子表格的列表中。

目前,据我了解,嵌套循环除了最后一步之外,都正常执行。每一列都添加到电子表格中,除了源电子表格的最后一列的值,而不是与每一列相关的值。

我尝试更改缩进以将代码级别与不同部分相关联(因为我认为这是问题所在)并尝试在数据框中移动附加列,但无济于事。

for i in distlist: #listname = i[4:] + '_norm' df2 = pd.read_excel(i,header=0,index_col=None, skip_blank_lines=True) df3 = df2.dropna(axis=0, how='any')

cols = []
for column in df3:
    cols.append(column)

    for x in cols:
        listname = x + ' norm'
        maxval = df3[x].max()
        print(maxval)
        mylist = []

        for j in df3[x]:
            findNL = (j/maxval)
            mylist.append(findNL)
        df3[listname] = mylist


        saveloc = 'E:/test/'  
        filename = i[:-18] + '_Normalised.xlsx'
        df3.to_excel(saveloc+filename, index=False) 

新列将添加到输出数据框中,其中包含与源电子表格中的字段标题相关的定制标题,并根据 (listname) 重命名。这些新列中的每一列中的数据都是相同的,并且与电子表格中的最后一列相关。对我来说,它似乎每次都会覆盖这些值(好像循环遍历整个电子表格,而不是为每一列输出),并将其添加到电子表格中。

任何帮助将不胜感激。我认为这很简单,但我还没有弄清楚是什么......

【问题讨论】:

    标签: python-3.x pandas for-loop nested-loops


    【解决方案1】:

    如果我对您的理解正确,那么您将事情复杂化了。您不需要 for 循环。您可以简化代码:

    # Make example dataframe, this is not provided
    df = pd.DataFrame({'col1':[1, 2, 3, 4],
                      'col2':[5, 6, 7, 8]})
    
    print(df)
       col1  col2
    0     1     5
    1     2     6
    2     3     7
    3     4     8
    

    现在我们可以使用DataFrame.applyadd_suffix 为新列提供_norm 后缀,然后将这些列连接到一个最终数据帧

    df_conc = pd.concat([df, df.apply(lambda x: x/x.max()).add_suffix('_norm')],axis=1)
    
    print(df_conc)
       col1  col2  col1_norm  col2_norm
    0     1     5       0.25      0.625
    1     2     6       0.50      0.750
    2     3     7       0.75      0.875
    3     4     8       1.00      1.000
    

    【讨论】:

      【解决方案2】:

      非常感谢。我想我只是把它复杂化了。顺便说一句,我认为我的代码可能会做同样的工作,但由于值的差异很小,所以并不显着。

      感谢您的帮助@Erfan

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-24
        • 2021-12-13
        • 2021-06-22
        • 2021-09-06
        • 1970-01-01
        • 2021-08-21
        • 2022-08-15
        • 1970-01-01
        相关资源
        最近更新 更多