Ich lerne die verschiedenen Aspekte von Python Pandas und ich stolperte über einige seltsame Verhalten der Median-Funktion für groupby-Objekte, wenn es für binned Daten verwendet wird.Pandas groupby-median Funktion füllt leere Bins mit Zufallszahlen
Beispielcode:
import pandas as pd
d = pd.DataFrame([1,2,5,6,9,3,6,5,9,7,11,36,4,7,8,25,8,24,23])
b = [0,5,10,15,20,25,30,35,40,45,50,55]
print d.groupby(pd.cut(d[0],b)).count()
print d.groupby(pd.cut(d[0],b)).mean()
print d.groupby(pd.cut(d[0],b)).median()
Ausgang für Zahl:
(0, 5] 6
(5, 10] 8
(10, 15] 1
(15, 20] 0
(20, 25] 3
(25, 30] 0
(30, 35] 0
(35, 40] 1
(40, 45] 0
(45, 50] 0
(50, 55] 0
Ausgang für Mittelwert:
(0, 5] 3.333333
(5, 10] 7.500000
(10, 15] 11.000000
(15, 20] NaN
(20, 25] 24.000000
(25, 30] NaN
(30, 35] NaN
(35, 40] 36.000000
(40, 45] NaN
(45, 50] NaN
(50, 55] NaN
Ausgang für Median:
(0, 5] 3.5
(5, 10] 7.5
(10, 15] 11.0
(15, 20] 18.0
(20, 25] 24.0
(25, 30] 30.5
(30, 35] 30.5
(35, 40] 36.0
(40, 45] 18.0
(45, 50] 18.0
(50, 55] 18.0
Alle leeren Behälter sind mit den Nummern 18 und 30.5 gefüllt, was hier keinen Sinn ergibt.
Auch die letzten drei Zahlen änderten sich zufällig, wenn ich eine Nummer in der ursprünglichen Liste geändert wird, dann habe ich eine Ausgabe wie folgt aus:
(0, 5] 3.500000e+00
(5, 10] 7.500000e+00
(10, 15] 1.100000e+01
(15, 20] 1.800000e+01
(20, 25] 2.450000e+01
(25, 30] 3.050000e+01
(30, 35] 3.050000e+01
(35, 40] 3.600000e+01
(40, 45] 3.814316e+228
(45, 50] 3.814316e+228
(50, 55] 3.814316e+228
eine andere Nummer in der Liste ändern würde mich Ausgang mit der Nummer 18 geben Am Ende nochmal.
Ist das nur ein Fehler?
Gibt es gültige Gründe für dieses Verhalten?
Mache oder interpretiere ich hier etwas falsch?
Im Moment muss ich die NaN-Ausgabe der Mean-Funktion verwenden, um leere Median-Bins herauszufiltern, aber ich denke, der Median sollte leere Werte genauso behandeln wie der Mittelwert.
Ich bin nicht sicher, warum das dir so ein Ergebnis geben würde ... Aber Sie können verwenden [apply] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.apply.html): '' 'd.groupby (pd.cut (d [0] , b)). apply (numpy.median) '' ' – dermen
Es sieht aus wie ein Fehler. Sie können [hier] melden (https://github.com/pydata/pandas/issues). – ayhan
Danke, ich habe gerade einen Fehlerbericht geschrieben. – Khris