Vergleich der vorherigen Reihe von Werten in Pandas DataFrame
import pandas as pd
data={'col1':[1,3,3,1,2,3,2,2]}
df=pd.DataFrame(data,columns=['col1'])
print df
col1
0 1
1 3
2 3
3 1
4 2
5 3
6 2
7 2
Habe ich Folgendes Pandas DataFrame, und ich möchte eine weitere Spalte, vergleicht die Vorherige Zeile des col1, um zu sehen, wenn Sie gleich sind. Was wäre der beste Weg, dies zu tun? Es wäre wie die folgenden DataFrame. Dank
col1 match
0 1 False
1 3 False
2 3 True
3 1 False
4 2 False
5 3 False
6 2 False
7 2 True
InformationsquelleAutor jth359 | 2016-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
eq
mitshift
:Oder statt
eq
verwenden==
, aber es ist ein bisschen slowier in großen DataFrame:Timings:
df = pd.concat([df]*10000, ignore_index=True)
.==
sollte nicht langsamer als miteq
im Allgemeinen (ich bekomme das Gegenteil zu Ihnen, wenn ich diese testen zum Beispiel).Danke für den Kommentar. Ich Teste es unter windows mehr Zeit, und wenn vergleichen mit skalaren, timings sind die gleichen, aber wenn Sie vergleichen 2 Serie
eq
,ne
,lt
... war schneller als==
,!=
,>
in größeren df. Was war deine timings in größerendf
?Was für ein unglaubliches Konzept! Also die
shift
Standard ist die Verlagerung nach unten sehe ich. Und warum die pandas Dokumentation auf.eq
enthält kein Beispiel, das tatsächlich verwendet.eq
? Komisch. Aber ich denke, es funktioniert genauso wie==
, außer für die Rechenzeit.InformationsquelleAutor jezrael
1) pandas Ansatz: Verwenden
diff
:2) numpy Ansatz: Verwenden
np.ediff1d
.Beide produzieren:
Timings: (für den gleichen
DF
verwendet von @jezrael)InformationsquelleAutor Nickil Maveli
Hier ist ein NumPy-arrays basierenden Ansatz verwenden
schneiden
, ermöglicht uns die Nutzung der Ansichten in die Eingabe-array für die Effizienz Zwecke -Probe Gefahren -
Runtime test -
InformationsquelleAutor Divakar