2014-04-07 4 views
16

Se voglio far cadere indice duplicato in un dataframe seguito non funziona per ovvi motivi:modo più veloce per DROP INDEX duplicato in un Pandas dataframe

myDF.drop_duplicates(cols=index) 

e

myDF.drop_duplicates(cols='index') 

cerca i una colonna denominata 'indice'

Se voglio eliminare un indice che devo fare:

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

C'è un modo più efficiente?

+1

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

+1

@PaulH: La risposta alla tua domanda di Luciano è la stessa della mia domanda in una sola riga – RukTech

risposta

26

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

+0

Mi piace questo metodo. Grazie! @CT – RukTech

+0

@CT Zhu - Se io uso questo metodo si sta unendo le mie Indes traino columsn in un unico column.I non si vuole che a happed.Is c'è un modo intorno ad esso? – liv2hak

+0

@ liv2hak, chiedere mente una nuova domanda con un esempio di set di dati minimo? –

5

È possibile utilizzare numpy.unique per ottenere l'indice dei valori unici e utilizzare iloc per ottenere quelle indici:

>>> 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

Questo è MOLTO più veloce ..... ancora più veloce se si usa df.ix [idx] – baconwichsand

16

Il metodo 'duplicato' lavora per dataframes e per la serie. Basta selezionare su quelle file che non sono contrassegnati come avendo un indice di duplicato:

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

Tuttavia, questo farebbe cadere tutti i duplicati? –

+1

Si noti che questo è il metodo più veloce per i casi di test che ho esaminato: http://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and-timeseries/34297689#34297689 Puoi anche riprodurre il comportamento della risposta accettata usando esattamente: 'df [~ df.index.duplicated (keep = 'first)]' – n8yoder

Problemi correlati