tablas seleccionar recorrer notebook nombres nombre libreria documentacion datos data con columnas cargar cambiar python pandas

seleccionar - ¿Cómo obtengo una lista de todos los elementos duplicados que usan pandas en python?



seleccionar columnas de un dataframe pandas (4)

Tengo una lista de artículos que probablemente tenga 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 de 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 artículos duplicados. Pero, cuando uso el código anterior, solo obtengo el primer elemento. En la referencia de la API, veo cómo puedo obtener el último elemento, pero me gustaría tenerlos a todos para poder inspeccionarlos visualmente y ver por qué estoy obteniendo la discrepancia. Por lo tanto, en este ejemplo me gustaría obtener las tres entradas A036 y las 11795 entradas y cualquier otra entrada duplicada, en lugar de la primera. Cualquier ayuda es muy apreciada.


Con Pandas versión 0.17, puede establecer ''keep = False'' en la función duplicated para obtener todos los elementos duplicados.

In [1]: import pandas as pd In [2]: df = pd.DataFrame([''a'',''b'',''c'',''d'',''a'',''b'']) In [3]: df Out[3]: 0 0 a 1 b 2 c 3 d 4 a 5 b In [4]: df[df.duplicated(keep=False)] Out[4]: 0 0 a 1 b 4 a 5 b


Método n. ° 1: imprima todas las filas donde el ID es uno de los ID duplicados:

>>> import pandas as pd >>> df = pd.read_csv("dup.csv") >>> ids = df["ID"] >>> df[ids.isin(ids[ids.duplicated()])].sort("ID") ID ENROLLMENT_DATE TRAINER_MANAGING TRAINER_OPERATOR FIRST_VISIT_DATE 24 11795 27-Feb-12 0643D38-Hanover NH 0643D38-Hanover NH 19-Jun-12 6 11795 3-Jul-12 0649597-White River VT 0649597-White River VT 30-Mar-12 18 8096 19-Dec-11 0649597-White River VT 0649597-White River VT 9-Apr-12 2 8096 8-Aug-12 0643D38-Hanover NH 0643D38-Hanover NH 25-Jun-12 12 A036 30-Nov-11 063B208-Randolph VT 063B208-Randolph VT NaN 3 A036 1-Apr-12 06CB8CF-Hanover NH 06CB8CF-Hanover NH 9-Aug-12 26 A036 11-Aug-12 06D3206-Hanover NH NaN 19-Jun-12

pero no pude pensar en una buena manera de evitar repetir ids tantas veces. Prefiero el método n. ° 2: groupby en la ID.

>>> pd.concat(g for _, g in df.groupby("ID") if len(g) > 1) ID ENROLLMENT_DATE TRAINER_MANAGING TRAINER_OPERATOR FIRST_VISIT_DATE 6 11795 3-Jul-12 0649597-White River VT 0649597-White River VT 30-Mar-12 24 11795 27-Feb-12 0643D38-Hanover NH 0643D38-Hanover NH 19-Jun-12 2 8096 8-Aug-12 0643D38-Hanover NH 0643D38-Hanover NH 25-Jun-12 18 8096 19-Dec-11 0649597-White River VT 0649597-White River VT 9-Apr-12 3 A036 1-Apr-12 06CB8CF-Hanover NH 06CB8CF-Hanover NH 9-Aug-12 12 A036 30-Nov-11 063B208-Randolph VT 063B208-Randolph VT NaN 26 A036 11-Aug-12 06D3206-Hanover NH NaN 19-Jun-12


Usando un elemento lógico o y estableciendo el argumento take_last del método duplicado de pandas en True y False puedes obtener un conjunto de tu dataframe que incluya todos los duplicados.

df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols=''ID'',take_last=False)|df_bigdata.duplicated(cols=''ID'',take_last=True)]


df[df.duplicated([''ID''], keep=False)]

devolverá todas las filas duplicadas a usted.

duplicated

keep: {''primero'', ''último'', falso}, predeterminado ''primero''

  • primero: Marcar duplicados como Verdadero, excepto para la primera ocurrencia.
  • last: Mark se duplica como True excepto por la última ocurrencia.
  • Falso: marque todos los duplicados como True.