2017-02-19 3 views
-1

Unten ist, wie mein Datensatz wie folgt aussieht:Python Gruppe um mehrere Spalten und das Ergebnis plotten?

Levels  Role  Status 
ABC  SE  Open 
XYZ  SSE  Closed 
KYZ  LA  Closed 

Hier meine Anforderung ist die Zählung bei jedem ‚Niveau‘ und für jede ‚Rolle‘ erhalten wo Status ‚geschlossen‘.

Ich verwende den folgenden Code, um das gewünschte Ergebnis zu erhalten.

df[df['Status'] == 'Closed'].groupby(['Levels','Role']).size() 

Jetzt möchte ich diese Ergebnisse plotten. Wie zeichne ich dieses Ergebnis auf? Es muss ein Selbstverständnis sein. Welche Art von Handlung ist am besten für meine Anforderung geeignet.

Ich bin neu im Visualisierungsteil.

Dank

Antwort

1

Wenn Sie nicht wissen, wie das Ergebnis sichtbar zu machen, wie soll jemand wissen. Aber eine Art allgemeiner Weg, dies zu tun, könnte darin bestehen, eine Pivot-Tabelle zu erstellen, bei der man eine der Kategorien als Spalte und die andere als Index verwenden und dann ein Balkendiagramm davon zeichnen kann.

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

levels=["ABC", "XYZ", "KYZ", "KYZ"] 
roles = ["SE", "SSE", "LA", "SSE"] 
status = ["Open", "Closed", "Closed", "Closed"] 

df=pd.DataFrame({"Levels" : levels, "Role":roles, "Status":status}) 

df2 = df[df['Status'] == 'Closed'].groupby(['Levels','Role']).size().reset_index(name='Count') 
df3 = pd.pivot_table(df2, values='Count', columns=['Levels'], index = "Role", 
         aggfunc=np.sum, fill_value=0) 

df3.plot(kind="bar") 
plt.show() 

enter image description here

+0

Ich entschuldige mich. Ich meinte, das wäre der bessere Weg, solche Ergebnisse zu visualisieren, so dass es leicht zu interpretieren wäre. Vielen Dank. Es sieht gut aus für mich. Nur eine Sache, dass ich mehr als 50 Werte in meiner Level-Spalte habe, wegen dieser Überlappung. Kann man damit umgehen? – Niranjanp

+0

Was überlappt? Wenn es um die Legende geht, kann das Verringern der Schriftgröße und/oder das Vergrößern der Zifferngröße hilfreich sein. Sie können Ebenen und Rolle auch austauschen, wenn Role weniger mögliche Einträge enthält. Verschiedene Arten von Parzellen könnten ebenfalls besser geeignet sein, aber auch hier braucht man eine ungefähre Vorstellung davon, wie die endgültige Handlung aussehen soll, sonst graben wir hier im Dunkeln. – ImportanceOfBeingErnest

+0

danke. Diese Art von Handlung scheint gut nach meiner Anforderung. Ich habe diese Zeile 'plt.legend (bbox_to_anchor = (0., 1.02, 1., .108), loc = 3, ncol = 8, borderaxespad = 0.3)' hinzugefügt. Die Legenden sind jetzt lesbar. Nur Problem mit den Balken, da Farben nicht gut unterscheidbar sind. Wie auch immer, nochmals vielen Dank. – Niranjanp

Verwandte Themen