2014-04-07 14 views
16

Wenn ich will, in einem Datenrahmen duplizierten Index fallen folgende Angaben nicht aus offensichtlichen Gründen nicht funktioniert:schnellste Weg duplizierte Index Drop in einer Pandas Dataframe

myDF.drop_duplicates(cols=index) 

und

myDF.drop_duplicates(cols='index') 

sucht eine Spalte ‚Index‘ genannt

Wenn ich einen Index löschen möchte ich tun habe:

myDF['index'] = myDF.index 
myDF= myDF.drop_duplicates(cols='index') 
myDF.set_index = myDF['index'] 
myDF= myDF.drop('index', axis =1) 

Gibt es einen effizienteren Weg?

+1

http://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and- Zeitreihe –

+1

@PaulH: Die Antwort auf Ihre Frage von Luciano ist die gleiche wie meine Frage nur in einer einzigen Zeile – RukTech

Antwort

26

einfach: DF.groupby(DF.index).first()

+0

Ich mag diese Methode. Vielen Dank! @CT – RukTech

+0

@CT Zhu - Wenn ich diese Methode benutze, ist es meine tow indes columsn in eine einzelne Spalte zu kombinieren. Ich will das nicht geschehen. Gibt es einen Weg darum herum? – liv2hak

+0

@ liv2hak, bitte fragen Sie eine neue Frage mit einem minimalen Beispieldatensatz? –

5

können Sie numpy.unique verwenden den Index eindeutige Werte zu erhalten und verwenden iloc diese Indizes zu erhalten:

>>> df 
     val 
A 0.021372 
B 1.229482 
D -1.571025 
D -0.110083 
C 0.547076 
B -0.824754 
A -1.378705 
B -0.234095 
C -1.559653 
B -0.531421 

[10 rows x 1 columns] 

>>> idx = np.unique(df.index, return_index=True)[1] 
>>> df.iloc[idx] 
     val 
A 0.021372 
B 1.229482 
C 0.547076 
D -1.571025 

[4 rows x 1 columns] 
+2

Das ist viel schneller ..... noch schneller, wenn Sie df.ix verwenden [idx] – baconwichsand

16

Die ‚dupliziert‘ Methode funktioniert für Datenrahmen und für die Serie. Wählen Sie einfach auf die Zeilen, die einen doppelten Index haben nicht markiert sind:

df[~df.index.duplicated()] 
+0

Dies würde jedoch alle Duplikate fallen lassen? –

+1

Beachten Sie, dass dies die schnellste Methode für die von mir untersuchten Testfälle ist: http://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and-timeseries/34297689#34297689 Sie können das Verhalten der akzeptierten Antwort auch genau reproduzieren mit: 'df [~ df.index.duplicated (keep = 'first)]' ' – n8yoder