2017-11-30 1 views
0

in Pandas Ich möchte eine neue Spalte 'Neighbor' in meinem Dataframe einführen, die (zB) den Index oder den Wert einer anderen Zeile speichert, für die eine bestimmte Spalte B dem Wert von die aktuelle Zeile. Zum BeispielZeile mit nächstem Wert erhalten

A Neighbor 
0 5 1 
1 4 0 
2 1 3 
3 2 2 
4 10 0 

Wissen Sie, dass eine Pandas-Funktion das macht? Da mein Datensatz sehr groß ist gilt leider zu langsam.

Danke!

+0

Wenn Sie sortieren die gesamte Liste (A), können Sie einfach .shift() auf dem Index ausführen? Möglicherweise müssen Sie den Index als eine Spalte speichern, um die Verschiebefunktion zu erhalten, um sie auf diese Weise herauszuziehen. – boethius

Antwort

1

So etwas bin mit könnte den Trick tun:

df['myindex'] = df.index 
# result = df.sort(['A']) 
result = df.sort_values(by='A') 
result['NeighborIndex'] = result['myindex'].shift(-1) 
+0

Aus den Dokumenten: Art: {'Quicksort', 'Mergesort', 'Heapsort'}, Standard 'Quicksort' Wahl des Sortieralgorithmus. Siehe auch ndarray.np.sort für weitere Informationen. Mergesort ist der einzige stabile Algorithmus. Für DataFrames wird diese Option nur angewendet, wenn nach einer einzelnen Spalte oder einem Label sortiert wird. – boethius

+0

Die erste Sortierung kann eine n 2 Worst-Case-Laufzeit vermeiden, es sei denn, Sie können eine Optimierung für die Sortierung oder eine unsortierte Liste ohne Performance-Treffer – boethius

+0

erhalten, wenn Sie sich in der 100 von Millionen Reihen befinden Denken Sie darüber nach, dies in einer Datenbank oder etwas zu tun? – boethius

1

IDK, ob Sie meine Update Antwort für Ihre vorherige Frage oder nicht überprüfen, das ist die Art, wie ich

a=df.A.values[:,None]-df.A.values 
np.fill_diagonal(a, 9999999) 
np.argmin(abs(a),0) 
Out[1160]: array([1, 0, 3, 2, 0], dtype=int64) 
+0

Danke, ich habe gerade gesehen! Das funktioniert und ist interessant, aber ich fürchte, es ist immer noch ein bisschen langsam und "hacky" ... cool und würde funktionieren. – Gemini

+1

@Gemini wenn du denkst, dass numpy langsam ist ... kannst du es ausprobieren ... immer nuepy schneller als Pandas. – Wen

Verwandte Themen