Pandas: ERROR: en _nsorted para marco con índice de valores duplicados

Creado en 9 jun. 2016  ·  5Comentarios  ·  Fuente: pandas-dev/pandas

La función siguiente se ha implementado incorrectamente. Si el marco tiene un índice con valores duplicados, obtendrá un resultado con más de n filas y no ordenadas correctamente. Entonces nsmallest y nlargest para DataFrame no devuelven un marco correcto en este caso particular.

def _nsorted(self, columns, n, method, keep):
    if not com.is_list_like(columns):
        columns = [columns]
    columns = list(columns)
    ser = getattr(self[columns[0]], method)(n, keep=keep)
    ascending = dict(nlargest=False, nsmallest=True)[method]
    return self.loc[ser.index].sort_values(columns, ascending=ascending,
                                           kind='mergesort')
Bug

Comentario más útil

Todos 5 comentarios

Por supuesto:

In [71]: df = pd.DataFrame({'a':[1,2,3,4], 'b':[4,3,2,1]}, index=[0,0,1,1])

In [72]: df.nlargest(1, 'a')
Out[72]:
   a  b
1  4  1
1  3  2

In [73]: df.nlargest(2, 'a')
Out[73]:
   a  b
1  4  1
1  4  1
1  3  2
1  3  2

( Nota al margen de
¿Interesado en hacer un PR para solucionar este problema?

Sí, lo arreglaré pronto
Perdón por el ejemplo

Le 9 juin 2016 à 23:30, Joris Van den Bossche [email protected] a écrit:

Por supuesto:

En [71]: df = pd.DataFrame ({'a': [1,2,3,4], 'b': [4,3,2,1]}, index = [0,0,1, 1])

En [72]: df.nlargest (1, 'a')
Fuera [72]:
ab
1 4 1
1 3 2

En [73]: df.nlargest (2, 'a')
Fuera [73]:
ab
1 4 1
1 4 1
1 3 2
1 3 2
( Nota al margen de
¿Interesado en hacer un PR para solucionar este problema?

-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub o silencie el hilo.

mi solución no es muy elegante, pero no veo ninguna otra solución para lidiar con MultiIndex y el índice de valor duplicado

La suma parece funcionar bien en .19.2 Pero con el recuento, no parece tener sentido. El gl se repite tantas veces como la "n". ¿Es un error o estoy haciendo algo mal?

df.groupby(['a']).agg({'b':'count'}).nlargest(2, 'b')

    b
a   
1   1
2   1
3   1
4   1
1   1
2   1
3   1
4   1
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

andreas-thomik picture andreas-thomik  ·  3Comentarios

matthiasroder picture matthiasroder  ·  3Comentarios

MatzeB picture MatzeB  ·  3Comentarios

swails picture swails  ·  3Comentarios

idanivanov picture idanivanov  ·  3Comentarios