2014-11-26 11 views
6

Ich habe folgenden Datenrahmen (df) in Pandas:Pandas Plot Histogrammdatenrahmenindex

 NetPrice Units Royalty 
Price      
3.65 9.13 171 57.60 
3.69 9.23  13  4.54 
3.70 9.25 129 43.95 
3.80 9.49 122 42.76 
3.90 9.74 105 38.30 
3.94 9.86 158 57.35 
3.98 9.95  37 13.45 
4.17 10.42  69 27.32 
4.82 12.04 176 77.93 
4.84 24.22 132 59.02 
5.16 12.91 128 60.81 
5.22 13.05 129 62.00 

Ich versuche, ein Histogramm auf dem Index („Preis) mit einer y-Achse von“ Einheiten zu erstellen ". ich begann mit den folgenden:.?

plt.hist(df.index) 

das gibt mir ein Histogramm der Preis Plotten Wie kann ich die Einheiten auf der y-Achse hinzuzufügen gerade jetzt ist nur ein‚ scale‘

Danke!

+0

Ein Histogramm zeigt die Verteilung von Werten in einem einzelnen Datensatz (z. B. wie viele fallen zwischen 3,6 und 3,8). Wenn Sie zwei Dinge gegeneinander darstellen möchten, möchten Sie wahrscheinlich nur ein Balkendiagramm. Versuchen Sie 'plt.bar (df.index, df.Units)' – snorthway

+0

Einige meiner Daten sind ziemlich groß, deshalb funktioniert ein Balkendiagramm nicht. Ich möchte, dass die Anzahl der Einheiten zwischen 3,6 und 3,8 liegt, damit ich immer sehen kann, wie viele Einheiten in jeder Tonne verkauft wurden. – DigitalMusicology

Antwort

13

Da Ihre Daten bereits teilweise aggregiert sind, können Sie die Methoden hist() nicht direkt verwenden. Wie @snorthway in den Kommentaren sagte, können Sie dies mit einem Balkendiagramm tun. Nur Sie müssen zuerst Ihre Daten in Buckets ablegen. Meine bevorzugte Methode, Daten in Buckets zu speichern, ist die Methode pandas cut().

Lassen Sie uns einige Beispieldaten einrichten, da Sie nicht vorsah einige, die einfach zu bedienen ist:

np.random.seed(1) 
n = 1000 
df = pd.DataFrame({'Price' : np.random.normal(5,2,size=n), 
        'Units' : np.random.randint(100, size=n)}) 

Lassen Sie uns die Preise in 10 gleichmäßigen Abständen Eimer setzen: Wir haben also jetzt

df['bucket'] = pd.cut(df.Price, 10) 
print df.head() 

     Price Units   bucket 
0 8.248691  98 (7.307, 8.71] 
1 3.776487  8 (3.0999, 4.502] 
2 3.943656  89 (3.0999, 4.502] 
3 2.854063  27 (1.697, 3.0999] 
4 6.730815  29 (5.905, 7.307] 

ein Feld, das den Bucket-Bereich enthält. Wenn Sie diesen Eimern andere Namen geben wollen, können Sie darüber in dem ausgezeichneten Pandas documentation lesen. Jetzt können wir die Pandas groupby() Methode und sum() verwenden, um die Geräte aufaddieren:

newdf = df[['bucket','Units']].groupby('bucket').sum() 
print newdf 
        Units 
bucket     
(-1.122, 0.295]  492 
(0.295, 1.697]  1663 
(1.697, 3.0999] 5003 
(3.0999, 4.502] 11084 
(4.502, 5.905] 15144 
(5.905, 7.307] 11053 
(7.307, 8.71]  4424 
(8.71, 10.112]  1008 
(10.112, 11.515]  77 
(11.515, 12.917] 122 

, der wie ein Sieger aussieht ... jetzt machen wir es plotten:

newdf.plot(kind='bar') 

enter image description here

Verwandte Themen