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')
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
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