2017-11-30 2 views
1

ich einen Datenrahmen erstellt haben, die nur zwei Spalten von einem anderen Datenrahmen enthält:Plotten ein Diagramm mit Pandas nur bestimmte Werte anzeigen

df1 = df[["BNF Chapter", "Name"]] 
df1 

Dieses ein Datenrahmen mit den beiden Säulen zeigt. Ich habe eine Gruppe nach Funktion durchgeführt, so dass für jedes Kapitel zB 1 die Namen der Medikamente für dieses spezifische Kapitel angezeigt werden

df1.groupby (['BNF Chapter', 'Name']) ['BNF Chapter']. Summe()

BNF Chapter Name 
1   Allantoin + Lidocaine       4 
      Aluminium hydroxide        2 
      Aluminium hydroxide + Magnesium trisilicate  2 
      Alverine          702 
21   Polihexanide         42 

Wie kann ich dies für 1 Kapitel spezifische in einem Diagramm zeichnen und haben die Namen der Medikamente auf der einen Seite und der Höhe der Zeit am Boden des Graphen vorgeschrieben?

Ich würde jede Hilfe zu diesem Thema sehr schätzen!

Jede Hilfe würde sehr geschätzt werden !! :)

+1

Können Sie bitte ein Beispiel für die Werte vor der Transformation hinzufügen und wie möchten Sie danach aussehen? – Zooby

Antwort

0

Sie können eine groupby auf einer Säule (n) durchführen und immer noch Zugriff auf diese Spalte -

df1.groupby(['BNF Chapter','Name'])['BNF Chapter'].sum() 
+0

@ COOLDSPEED. Danke, das funktioniert ein Vergnügen !! – Katie

+0

@COLDSPEED Wissen Sie, wie ich diese Informationen in einem Diagramm darstellen könnte? Zum Beispiel der Name der Droge gegen wie oft es für ein bestimmtes Kapitel genannt wurde? – Katie

+0

@Katie Weisen Sie das obige Ergebnis 'g' zu. Dann machen Sie etwas wie 'g.plot(); plt.show() ' –

0

Wenn ich habe richtig verstanden, was Sie versuchen zu tun, die passenden Namen aggregieren für ein bestimmtes BNF-Kapitel in ein Set?

Ich stehle die Antwort von Myon in this question

# if list of unique items is desired, use set 
df.groupby('A',as_index=False)['B'].aggregate(lambda x: set(x)) 

# if duplicate items are okay, use list 
df.groupby('A',as_index=False)['B'].aggregate(lambda x: list(x)) 
+0

Ja, Sie haben Recht Ich möchte zählen, wie oft ein bestimmter Name für ein bestimmtes Kapitel aufgerufen wurde. Wären Sie möglicherweise in der Lage, diese Informationen in einem Diagramm darzustellen? – Katie

+0

Wenn Sie nur zählen möchten, wie oft eine Zeile mit einem gegebenen Kapitelnamen vorkommt, wäre es df.groupby ('BNF Chapter'). Count() Ich benutze Zeppelin für all unsere Visualisierung, also bin ich Angst ich kann da nicht viel helfen. – Zooby

0

Wenn Sie lieber einen Rahmen mit nur so viele Zeilen haben würde, wie Sie Kapitel haben, können Sie dies tun, die eine Liste von Namen bietet für jede BNF Chapter.

df1.groupby('BNF Chapter').Name.apply(lambda x: [x]) 

EDIT Um Ihre Frage auf Plotten einzelnen Arzneimittel (Kombinationen), vorausgesetzt, es sind nicht unerschwinglich viele, können Sie etwas tun kann - ich beachten Sie sagen nur für Kapitel 1.

Ich nehme an, dieser Befehl erzeugte die Ausgabe, die in Ihrer Frage gezeigt wurde. . df1.groupby ([ 'BNF Kapitel', 'Name']) [ 'BNF Kapitel'] sum()

Wenn ja, können Sie dies tun:

df1.groupby(['BNF Chapter','Name'])['BNF Chapter'].sum().loc['1'].sort_values(ascending=False).plot(kind='barh') 

Wenn BNF Chapter nicht a string, entfernen Sie die Anführungszeichen so, dass .loc['1'] stattdessen .loc[1] wird.

+0

Danke! Würdest du wissen, wie man für jedes Kapitel eine Grafik aufträgt und den Namen des Medikaments auf der Seitenachse und die Anzahl der Zeiten, die unten angegeben sind, hat. Würdest du wissen, wie man das aufträgt? – Katie

+0

Wie oft erscheint jedes Medikament in jedem Kapitel oder für jedes Kapitel, wie viele Medikamente werden verschrieben? – ako

+0

Ich habe meine Frage oben bearbeitet – Katie

Verwandte Themen