如何从 python 中的嵌套 for 循环生成新数据帧?

how to generate a new dataframe from a nested for loop in python?

我是Pyhton语言的新手。现在,我将从嵌套循环创建数据框。直接上数据。 示例:X_train。 X_train 有 9 行和 4 列(或特征)

print(X_train)
          0      1      2      3
  0     0.00   0.00   0.09   0.00
  1     0.10   0.00   0.00   0.12
  2     0.71   0.00   0.40   0.20
  3     1.00   0.00   0.54   0.14
  4     0.88   0.00   0.65   0.28
  5     0.77   0.00   0.68   0.33
  6     0.71   0.00   0.97   0.43
  7     0.65   0.00   0.56   0.69
  8     0.27   1.00   0.24   1.00

然后,我创建了一个函数(一个嵌套的 for 循环)来创建具有大小行和列(如矩阵正方形)的新数据框。函数下方:

import pandas as pd
def function1(data):
    for i in range(len(X_train.index)):  
        for j in range(len(X_train.index)):        
            sum_row = 0
            distance = 0
            for k in range(len(X_train.columns)):         
                distance = pow((X_train.values[i,k]-X_train.values[j,k]),2)
                sum_row = sum_row + distance
            df_test1 = pd.DataFrame(sum_row, index=[i], columns=[j])
            print(df_test1)

这个函数的结果是:

function1(X_train)
     0
0  0.0
          1
0  0.035896
          2
0  0.654024
          3
0  1.228754
          4
0  1.171765
          5
0  1.063763
          6
0  1.485153
          7
0  1.140283
          8
0  2.096477
          0
1  0.035896
     1
1  0.0
          2
1  0.544068
          3
1  1.10117
          4
1  1.053592
          5
1  0.958978
          6
1  1.421161
          7
1  0.946359
          8
1  1.841666
      .
      .
      .
          0
8  2.096477
          1
8  1.841666
          2
8  1.854826
          3
8  2.346288
          4
8  2.059677
          5
8  1.892121
          6
8  2.065235
          7
8  1.345284
     8
8  0.0

根据上面的解释和问题,我想要的预期数据帧是:

function1(X_train)
      0     1     2     3     4     5     6     7     8
0   0.00   0.03  0.65  1.22  1.17  1.06  1.48  1.14  2.09
1   0.03   0.00  0.54  1.10  1.05  0.95  1.42  0.94  1.84
2     .      .     .     .     .     .     .     .     .    
3     .      .     .     .     .     .     .     .     .   
4     .      .     .     .     .     .     .     .     .   
5     .      .     .     .     .     .     .     .     .  
6     .      .     .     .     .     .     .     .     .   
7     .      .     .     .     .     .     .     .     .   
8   2.09   1.84  1.85  2.34  2.05  1.89  2.06  1.34  0.00

希望有人能帮我解决这个问题。谢谢

为了更简单,您可以先创建一个数组,然后将其转换为数据框。那么你的函数最好使用现有参数,使用 data 而不是 X_train

代码将如下所示:

import pandas as pd
def function1(data):
    df_test1 = [[] for i in range(len(data.index))]
    for i in range(len(data.index)):
        for j in range(len(data.index)):
            sum_row = 0
            distance = 0
            for k in range(len(data.columns)):
                distance = pow((data.values[i,k]-data.values[j,k]),2)
                sum_row = sum_row + distance
            df_test1[i].append(sum_row)
    df_test1 = pd.DataFrame(df_test1)
    return df_test1

df_test1 = function1(X_train)
df_test1