remove quitar example duplicated duplicate duplicados drop_duplicates data borrar python indexing pandas

python - quitar - Pandas: Obtenga índices duplicados



unique data frame pandas (5)

Aún más rápido y mejor:

df.index.get_duplicates()

Dado un marco de datos, quiero obtener los índices duplicados, que no tienen valores duplicados en las columnas, y ver qué valores son diferentes.

Específicamente, tengo este marco de datos:

import pandas as pd wget https://www.dropbox.com/s/vmimze2g4lt4ud3/alt_exon_repeatmasker_intersect.bed alt_exon_repeatmasker = pd.read_table(''alt_exon_repeatmasker_intersect.bed'', header=None, index_col=3) In [74]: alt_exon_repeatmasker.index.is_unique Out[74]: False

Y algunos de los índices tienen valores duplicados en la novena columna (el tipo de elemento repetitivo de ADN en esta ubicación), y quiero saber cuáles son los diferentes tipos de elementos repetitivos para ubicaciones individuales (cada índice = una ubicación del genoma).

Supongo que esto requerirá algún tipo de groupby y espero que algún groupby ninja pueda ayudarme.

Para simplificar aún más, si solo tenemos el índice y el tipo de repetición,

genome_location1 MIR3 genome_location1 AluJb genome_location2 Tigger1 genome_location3 AT_rich

Entonces, el resultado que me gustaría ver es el de todos los índices duplicados y sus tipos de repetición, como tales:

genome_location1 MIR3 genome_location1 AluJb

EDITAR: ejemplo de juguete agregado


Más sucintamente:

df[df.groupby(level=0).type.count() > 1]

FYI un multi-índice:

df[df.groupby(level=[0,1]).type.count() > 1]


También es útil y muy sucinto:

df[df.index.duplicated()]

Tenga en cuenta que esto solo devuelve una de las filas duplicadas, por lo que para ver todas las filas duplicadas, querrá esto:

df[df.index.duplicated(keep=False)]


>>> df[df.groupby(level=0).transform(len)[''type''] > 1] type genome_location1 MIR3 genome_location1 AluJb


df.groupby(level=0).filter(lambda x: len(x) > 1)[''type'']

filter método de filter para este tipo de operación. También puede usar el enmascaramiento y la transformación para obtener resultados equivalentes, pero esto es más rápido y también un poco más legible.

Importante:

El método de filter se introdujo en la versión 0.12, pero no funcionó en DataFrames / Series con índices no únicos. El problema, y ​​un problema relacionado con transform on Series, se corrigió con la versión 0.13, que debería lanzarse en cualquier momento.

Claramente, los índices no únicos son el corazón de esta pregunta, así que debo señalar que este enfoque no ayudará hasta que tenga pandas 0.13. Mientras tanto, la solución de transform es el camino a seguir. Tenga en cuenta que si prueba eso en una serie con un índice no único, también fallará.

No hay una buena razón por la cual el filter y la transform no se deben aplicar a índices no únicos; al principio solo se implementó pobremente.