Как написать вложенный цикл for
для доступа к каждой другой строке относительно строки в пределах pandas.dataframe
?
Я пытаюсь выполнить некоторые операции между строкамив pandas.dataframe Операция для моего примера кода вычисляет евклидовы расстояния между каждой строкой и каждой другой строкой. Затем результаты сохраняются в некотором списке в форме [(row_reference, name, dist)]
.
. Я понимаю, как получить доступ к каждой строке в pandas.dataframe, используя df.itterrows()
, но я не уверен, как получить доступ к каждой другой строке. относительно текущей строки для выполнения операции между строками.
import pandas as pd
import numpy
import math
df = pd.DataFrame([{'name': "Bill", 'c1': 3, 'c2': 8}, {'name': "James", 'c1': 4, 'c2': 12},
{'name': "John", 'c1': 12, 'c2': 26}])
#Euclidean distance function where x1=c1_row1 ,x2=c1_row2, y1=c2_row1, #y2=c2_row2
def edist(x1, x2, y1, y2):
dist = math.sqrt(math.pow((x1 - x2),2) + math.pow((y1 - y2),2))
return dist
# Calculate Euclidean distance for one row (e.g. Bill) against each other row
# (e.g. "James" and "John"). Save results to a list (N_name, dist).
all_results = []
for index, row in df.iterrows():
results = []
# secondary loop to look for OTHER rows with respect to the current row
# results.append(row2['name'],edist())
all_results.append(row,results)
Я надеюсь выполнить некоторую операцию edist()
на всех строках относительно текущей строки / индекса.
Я ожидаю, что цикл выполнит следующее:
In[1]:
result = []
result.append(['James',edist(3,4,8,12)])
result.append(['John',edist(3,12,8,26)])
results_all=[]
results_all.append([0,result])
result2 = []
result2.append(['John',edist(4,12,12,26)])
result2.append(['Bill',edist(4,3,12,8)])
results_all.append([1,result2])
result3 = []
result3.append(['Bill',edist(12,3,26,8)])
result3.append(['James', edist(12,4,26,12)])
results_all.append([2,result3])
results_all
Со следующим ожидаемым результатом:
OUT[1]:
[[0, [['James', 4.123105625617661], ['John', 20.12461179749811]]],
[1, [['John', 16.1245154965971], ['Bill', 4.123105625617661]]],
[2, [['Bill', 20.12461179749811], ['James', 16.1245154965971]]]]