Pandas: BUG: in _sortiert für Frame mit doppeltem Werteindex

Erstellt am 9. Juni 2016  ·  5Kommentare  ·  Quelle: pandas-dev/pandas

Die folgende Funktion wurde falsch implementiert. Wenn der Frame einen Index mit doppelten Werten hat, erhalten Sie ein Ergebnis mit mehr als n Zeilen, das nicht richtig sortiert ist. Daher geben nsmallest und nlargest für DataFrame in diesem speziellen Fall keinen korrekten Frame zurück.

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

Hilfreichster Kommentar

Alle 5 Kommentare

Tatsächlich:

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

( @ Tux1- Randnotiz zum späteren Nachschlagen, es ist immer schön, beim Öffnen einer Ausgabe ein kleines reproduzierbares Beispiel
Möchten Sie eine PR machen, um dies zu beheben?

Ja, das werde ich bald beheben
Entschuldigung für das Beispiel

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

Tatsächlich:

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]:
ab
1 4 1
1 3 2

In [73]: df.nlargest (2, 'a')
Out [73]:
ab
1 4 1
1 4 1
1 3 2
1 3 2
( @ Tux1- Randnotiz zum späteren Nachschlagen, es ist immer schön, beim Öffnen einer Ausgabe ein kleines reproduzierbares Beispiel
Möchten Sie eine PR machen, um dies zu beheben?

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub an oder schalten Sie den Thread stumm.

Mein Fix ist nicht sehr elegant, aber ich sehe keine andere Lösung, um mit MultiIndex und dupliziertem Wertindex umzugehen

Die Summe scheint in .19.2 gut zu funktionieren. Aber mit count scheint es keinen Sinn zu ergeben. Das df wird so oft wiederholt wie das "n". Ist das ein Fehler oder mache ich etwas falsch?

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
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen