Pandas: BUG: em _nsorted para frame com índice de valores duplicados

Criado em 9 jun. 2016  ·  5Comentários  ·  Fonte: pandas-dev/pandas

A função abaixo foi implementada incorretamente. Se o quadro tiver um índice com valores duplicados, você obterá um resultado com mais de n linhas e não classificado corretamente. Portanto, nsmallest e nlargest para DataFrame não retorna um quadro correto neste 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

Comentários muito úteis

Todos 5 comentários

De fato:

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 lateral
Interessado em fazer uma RP para consertar isso?

Sim, vou consertar isso em breve
Desculpe pelo exemplo

Em 9 de junho de 2016 às 23:30, Joris Van den Bossche [email protected] a écrit:

De fato:

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

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

Em [73]: df.nlargest (2, 'a')
Fora [73]:
ab
1 4 1
1 4 1
1 3 2
1 3 2
( Nota lateral
Interessado em fazer uma RP para consertar isso?

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub ou ignore a conversa.

minha correção não é muito elegante, mas não vejo nenhuma outra solução para lidar com MultiIndex e índice de valor duplicado

A soma parece funcionar bem em .19.2 Mas com a contagem, não parece fazer sentido. O df é repetido tantas vezes quanto o "n". Isso é um bug ou estou fazendo algo errado?

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
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Ashutosh-Srivastav picture Ashutosh-Srivastav  ·  3Comentários

MatzeB picture MatzeB  ·  3Comentários

songololo picture songololo  ·  3Comentários

idanivanov picture idanivanov  ·  3Comentários

amelio-vazquez-reina picture amelio-vazquez-reina  ·  3Comentários