2012-09-07 25 views
24

que tienen una trama de datos que se ha duplicado filas. Me gustaría obtener un DataFrame con un índice único y sin duplicados. Está bien descartar los valores duplicados. es posible? ¿Sería un hecho por groupby?pandas: trama de datos única

Respuesta

51
In [29]: df.drop_duplicates() 
Out[29]: 
    b c 
1 2 3 
3 4 0 
7 5 9 
+0

Vale la pena observar que esto toma la primera o la última ocurrencia. Entonces, primero debe ordenar por otra cantidad (si tiene suerte) o hacer alguna lógica complicada de grupo por lógica. – ely

+2

Esto está mal. drop_duplicates actúa únicamente sobre los valores (al menos en mi versión). Necesita reiniciar_index si desea incluir el índice y los valores o simplemente trabajar con el índice si desea tener un índice único. ¿Tal vez hay otra forma además de groupby para hacer cumplir un índice único? – mathtick

+1

Use 'df.drop_duplicates (inplace = True)' si no desea asignar una nueva variable. –

10

dimos cuenta de una manera de hacerlo es mediante la lectura de los ejemplos de documentación split-apply-combine.

df = pandas.DataFrame({'b':[2,2,4,5], 'c': [3,3,0,9]}, index=[1,1,3,7]) 
df_unique = df.groupby(level=0).first() 

df 
    b c 
1 2 3 
1 2 3 
3 4 0 
7 5 9 

df_unique 
    b c 
1 2 3 
3 4 0 
7 5 9 
+0

Esto se basa en el índice de la fila se duplican para las filas, donde (c b) se duplican los campos de datos, haciendo efectiva la parte índice de la fila como vector que desea ser únicos (no duplicados) – hobs

+3

Si tiene entradas de índice duplicadas, esta es la respuesta que desea. – rogueleaderr

+0

me estaba 'ValueError: Índice contiene entradas duplicadas, no puede reshape' al hacer' unstack' en un MultIndex pero esta solución funciona para que sólo yo tenía que hacer 'df_unique = df.groupby (nivel = [0,1]). first() ' – dashesy

Cuestiones relacionadas