La pandas
drop_duplicates
función es excelente para "uniquificar" un marco de datos. Sin embargo, uno de los argumentos de palabras clave para pasar es take_last=True
o take_last=False
, aunque me gustaría descartar todas las filas que están duplicadas en un subconjunto de columnas. es posible?
A B C
0 foo 0 A
1 foo 1 A
2 foo 1 B
3 bar 1 A
A modo de ejemplo, me gustaría dejar las filas que coinciden en columnas A
y C
por lo que este debe caer filas 0 y 1.
python
pandas
duplicates
Jamie Bull
fuente
fuente
df.reindex(df.iloc[:,[0,2]].drop_duplicates(keep=False).index)
?df.drop_duplicates(subset=[df.columns[0:2]], keep = False)
Solo quiero agregar a la respuesta de Ben en drop_duplicates :
keep
: {'first', 'last', False}, predeterminado 'first'primero: soltar duplicados, excepto la primera aparición.
último: soltar duplicados, excepto la última aparición.
Falso: descarta todos los duplicados.
Por lo tanto, configurar
keep
False le dará la respuesta deseada.fuente
Si desea que el resultado se almacene en otro conjunto de datos:
o
Si el mismo conjunto de datos necesita ser actualizado:
Los ejemplos anteriores eliminarán todos los duplicados y mantendrán uno, similar a
DISTINCT *
SQLfuente
uso
groupby
yfilter
fuente
En realidad, soltar las filas 0 y 1 solo requiere (cualquier observación que contenga A y C coincidentes se mantiene):
Pero sospecho que lo que realmente quieres es esto (se mantiene una observación que contiene A y C coincidentes):
Editar:
Ahora es mucho más claro, por lo tanto:
fuente
df.drop_duplicates(['A','C'])
como valor predeterminado para que una observación tome la primera o la última como mencioné en la pregunta, aunque me acabo de dar cuenta de que tenía la palabra clave incorrecta mientras escribía de memoria. Lo que quiero es soltar todas las filas que son idénticas en las columnas de interés (A y C en los datos de ejemplo).Prueba estas varias cosas
o
o
fuente