Tengo una lista de elementos que probablemente tengan algunos problemas de exportación. Me gustaría obtener una lista de los elementos duplicados para poder compararlos manualmente. Cuando trato de usar el método pandas duplicado , solo devuelve el primer duplicado. ¿Hay alguna forma de obtener todos los duplicados y no solo el primero?
Una pequeña subsección de mi conjunto de datos se ve así:
ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE
1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12
F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12
8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-Jun-12
A036,1-Apr-12,"06CB8CF-Hanover NH","06CB8CF-Hanover NH",9-Aug-12
8944,19-Feb-12,"06D26AD-Hanover NH",,4-Feb-12
1004E,8-Jun-12,"06388B2-Lebanon NH",,24-Dec-11
11795,3-Jul-12,"0649597-White River VT","0649597-White River VT",30-Mar-12
30D7,11-Nov-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",30-Nov-11
3AE2,21-Feb-12,"06405B2-Lebanon NH",,26-Oct-12
B0FE,17-Feb-12,"06D1B9D-Hartland VT",,16-Feb-12
127A1,11-Dec-11,"064456E-Hanover NH","064456E-Hanover NH",11-Nov-12
161FF,20-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",3-Jul-12
A036,30-Nov-11,"063B208-Randolph VT","063B208-Randolph VT",
475B,25-Sep-12,"06D26AD-Hanover NH",,5-Nov-12
151A3,7-Mar-12,"06388B2-Lebanon NH",,16-Nov-12
CA62,3-Jan-12,,,
D31B,18-Dec-11,"06405B2-Lebanon NH",,9-Jan-12
20F5,8-Jul-12,"0669C50-Randolph VT",,3-Feb-12
8096,19-Dec-11,"0649597-White River VT","0649597-White River VT",9-Apr-12
14E48,1-Aug-12,"06D3206-Hanover NH",,
177F8,20-Aug-12,"063B208-Randolph VT","063B208-Randolph VT",5-May-12
553E,11-Oct-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",8-Mar-12
12D5F,18-Jul-12,"0649597-White River VT","0649597-White River VT",2-Nov-12
C6DC,13-Apr-12,"06388B2-Lebanon NH",,
11795,27-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",19-Jun-12
17B43,11-Aug-12,,,22-Oct-12
A036,11-Aug-12,"06D3206-Hanover NH",,19-Jun-12
Mi código se ve así actualmente:
df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
Hay un par de elementos duplicados. Pero, cuando uso el código anterior, solo obtengo el primer elemento. En la referencia de API, veo cómo puedo obtener el último elemento, pero me gustaría tenerlos todos para poder inspeccionarlos visualmente para ver por qué obtengo la discrepancia. Entonces, en este ejemplo, me gustaría obtener las tres entradas A036 y las 11795 y cualquier otra entrada duplicada, en lugar de la primera. Cualquier ayuda es muy apreciada.
fuente
ID
, no las" filas idénticas en varias o todas las columnas ".Respuestas:
Método # 1: imprima todas las filas donde el ID es uno de los ID en duplicado:
pero no pude pensar en una buena manera de evitar que se repita
ids
tantas veces. Prefiero el método # 2:groupby
en la identificación.fuente
g for _
hacer?g for (placeholder, g) in df.groupby('bla') if 'bla'
; el guión bajo es un símbolo típico de marcador de posición de un argumento inevitable en el que no queremos usarlo para nada en una expresión de tipo lambda.sort
se desaprobó para tramas de datos a favor de cualquierasort_values
osort_index
relacionados para Q & ACon Pandas versión 0.17, puede establecer 'keep = False' en la función duplicada para obtener todos los elementos duplicados.
fuente
'all'
sería más lógico e intuitivo en mi opinión.le devolverá todas las filas duplicadas.
Según documentación :
fuente
Como no puedo comentar, por lo tanto, publico como una respuesta separada
Para encontrar duplicados sobre la base de más de una columna, mencione el nombre de cada columna como se muestra a continuación y le devolverá todas las filas duplicadas establecidas:
fuente
Esto funcionó para mi
fuente
== True
,.duplicated()
ya devuelve una matriz bool.Usando un elemento lógico o y configurando el argumento take_last del método pandas duplicado en Verdadero y Falso, puede obtener un conjunto de su marco de datos que incluye todos los duplicados.
fuente
Esto puede no ser una solución a la pregunta, pero para ilustrar ejemplos:
Las salidas:
fuente
sort("ID")
no parece estar funcionando ahora, parece obsoleto según el documento de clasificación , así que utilícelosort_values("ID")
para ordenar después del filtro duplicado, de la siguiente manera:fuente
Para mi base de datos duplicada (keep = False) no funcionó hasta que se ordenó la columna.
fuente
df[df.duplicated(['ID'])==True].sort_values('ID')
fuente