如何从 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
我是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