Auf der Suche nach einem besseren Weg werde ich es vorerst so zusammenfassen. ** (Wenn Sie einen besseren Weg kennen, lassen Sie es mich bitte wissen !!) **
① Grundlegend Wie in der folgenden Abbildung gezeigt, gibt es Excel, in dem dreidimensionale Koordinatenpunkte gespeichert sind, und ich möchte Zahlen mit denselben Koordinaten verknüpfen. Im folgenden Beispiel sind die Koordinaten von S / N-2 und die Koordinaten von S / N-3 (hellblau hervorgehoben) genau gleich, sodass sie als "gleiche Koordinaten!" Beurteilt werden.
② Anwendung Als Spezifikation des Ziels, an dem ich gerade arbeite, ist es schwierig, dass die Koordinaten genau übereinstimmen. Daher möchte ich beurteilen, dass sie mit einer bestimmten Marge übereinstimmen. Zum Beispiel sind die Koordinaten von S / N-8 und die Koordinaten von S / N-9 (gelb hervorgehoben) ** fast ** gleich, also beurteilen Sie bitte, dass sie auch "gleiche Koordinaten" sind.
Diesmal fiel mir keine weitere gute Idee für diese "Anwendung" ein. .. Wenn Sie nur die genaue Übereinstimmung extrahieren möchten, sollten Sie die X-Koordinate, die Y-Koordinate und die Z-Koordinate als Zeichenfolge kombinieren und beurteilen, ob sie übereinstimmen.
Erstellen Sie zunächst eine Funktion, die einschließlich des Randes beurteilt werden kann. In den folgenden Fällen wird der Fehler ± 100 ignoriert und True wird zurückgegeben, wenn die drei Koordinaten einschließlich des Randes übereinstimmen.
def coordinates_check(ax,ay,az,bx,by,bz):
margin=100
flag = 0
result=False
if ax-margin < bx < ax+margin:
flag = flag +1
if ay-margin < by < ay+margin:
flag = flag +1
if az-margin < bz < az+margin:
flag = flag +1
if flag >2:
result = True
return result
Verwenden Sie diese Funktion, um die Zeilen der Excel-Datei von oben zu lesen. Die Startnummer der zweiten for-Anweisung ist so festgelegt, dass die Messwerte nicht dupliziert werden.
df_test = pd.read_excel('sample.xlsx')
for i in range(len(df_test)):
ax= df_test.loc[i,"X-Koordinate"]
ay= df_test.loc[i,"Y-Koordinate"]
az= df_test.loc[i,"Z-Koordinate"]
k = i+1
for j in range(k,len(df_test)):
bx = df_test.loc[j,"X-Koordinate"]
by = df_test.loc[j,"Y-Koordinate"]
bz = df_test.loc[j,"Z-Koordinate"]
if coordinates_check(ax,ay,az,bx,by,bz):
print("Matched:",df_test.loc[i,"S/N"],"-->",df_test.loc[j,"S/N"])
Infolgedessen ist es gut gemacht.
Die Daten, die ich dieses Mal verwenden möchte, sind über 10.000 Zeilen und es dauerte ** ungefähr 3 Stunden **, um den obigen Code auszuführen ... Ungefähr zu dieser Zeit dachte ich, es sollte einen besseren Weg geben. Wenn Sie einen guten Weg kennen, helfen Sie bitte!