Anwenden von benutzerdefinierten Spalte, um (auf Kategorische) pandas boxplot?
EDIT: diese Frage stellte sich mit pandas ~0.13-und wurde überholt durch die direkte Unterstützung der irgendwo zwischen version 0.15-0.18 (als pro @Cireo die späte Antwort)
Bekomme ich eine boxplot
eines salary-Spalte in ein pandas DataFrame...
train.boxplot(column='Salary', by='Category', sym='')
...aber ich kann nicht herausfinden, wie definieren Sie den index-Reihenfolge auf die Spalte 'Kategorie' - ich will meine eigenen Auftrag, nach einem anderen Kriterium:
category_order_by_mean_salary = train.groupby('Category')['Salary'].mean().order().keys()
Wie kann ich meine benutzerdefinierte Spalte, um die boxplot Spalten? (andere als hässlich kludging die Spalte Namen mit einem Präfix, um zu erzwingen, Bestellung)
'Kategorie' ist ein string (wirklich, sollte eine kategorische, aber dies war in den 0.13, wo kategorischen war ein Dritte-Klasse-Bürger) - Spalte unter 27 unterschiedliche Werte: ['Accounting & Finance Jobs','Admin Jobs',...,'Travel Jobs']
. So kann es leicht faktorisierten mit pd.Categorical.from_array()
Bei der Prüfung der Verjährung ist innerhalb pandas.tools.plotting.py:boxplot()
, wandelt der Spalte Objekt, ohne dass der Bestellung:
- pandas.core.frame.py.boxplot() ist ein passthrough
- pandas.tools.Plotten.py:boxplot()
die instanziiert ... - matplotlib.pyplot.py:boxplot() , die instanziiert ...
- matplotlib.Achsen.py:boxplot()
Ich glaube, ich könnte entweder hacken bis eine benutzerdefinierte version des pandas boxplot(), oder gelangen in das innere des Objekts. Und auch Datei, die eine Verbesserung verlangen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schwer zu sagen, wie dies zu tun, ohne ein funktionierendes Beispiel. Meine erste Vermutung wäre, fügen Sie einfach eine integer-Spalte mit den Anweisungen, die Sie wollen.
Einfache, brute-force-Weg wäre um jeden boxplot ein zu einer Zeit.
apply
mit einem hard-codierten lookup-Tabelle. siehe meine bearbeitete Antwort für einen anderen Ansatz, aber.Eigentlich kam ich nicht weiter mit der gleichen Frage. Und ich löste es, indem Sie eine Karte, und setzen Sie die xticklabels, mit code wie folgt:
set_xticklabels()
geben ein Falsches Ergebnis, wie es nur überschreiben der bestehenden Etiketten.set_xticklabels(list('dca'))
sich nicht bewegt, der Wert von label d' auf den ersten Platz, wie Sie und die OP soll stattdessen re-Kennzeichnung, was das erste label war, als 'd'Beachten Sie, dass pandas können nun kategorischen Spalten. Wenn Sie nichts dagegen haben, dass alle Spalten, die in Ihrer Grafik, oder kürzen Sie entsprechend, können Sie etwas tun, wie die unten:
http://pandas.pydata.org/pandas-docs/stable/categorical.html
Letzten pandas scheint auch zu ermöglichen
positions
passieren den ganzen Weg durch von Bild zu Achsen.0.19.2
EDIT: das ist die richtige Antwort nach der direkten Unterstützung wurde Hinzugefügt, irgendwo zwischen version 0.15-0.18
Hinzufügen einer separaten Antwort, die vielleicht sein könnte, eine andere Frage - feedback willkommen.
Wollte ich eine benutzerdefinierte Spalte hinzuzufügen, um innerhalb eines groupby, die früher viele Probleme für mich. Am Ende hatte ich zu vermeiden versucht -
boxplot
aus einergroupby
Objekt, und stattdessen gehen Sie durch jede Nebenhandlung mich, die explizite Positionen.In meinem endgültigen code, es war sogar etwas mehr beteiligt, um zu bestimmen, Positionen, denn ich hatte mehrere Datenpunkte für jeden sortby Wert, und ich landete mit zu tun, die folgenden:
Klingt es irgendwie albern, aber viele der plot-erlauben Sie, um die Reihenfolge zu bestimmen. Zum Beispiel:
Library & dataset
Bestimmten Reihenfolge