Poiché i dati sono già parzialmente aggregati, non è possibile utilizzare direttamente i metodi hist()
. Come @snorthway ha detto nei commenti, puoi farlo con un grafico a barre. Solo tu devi prima mettere i tuoi dati in bucket. Il mio modo preferito per mettere i dati in bucket è con il metodo panda cut()
.
Facciamo impostare alcuni dati di esempio in quanto non ha fornito un po 'di che è facile da usare:
np.random.seed(1)
n = 1000
df = pd.DataFrame({'Price' : np.random.normal(5,2,size=n),
'Units' : np.random.randint(100, size=n)})
Mettiamo i prezzi in 10 secchi equidistanti:
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]
Così ora abbiamo un campo che contiene il range del secchio. Se vuoi dare a quei secchi altri nomi, puoi leggere a riguardo nell'eccellente Pandas documentation. Ora siamo in grado di utilizzare il metodo Panda groupby()
e sum()
a sommare quote:
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
Che assomiglia a un vincitore ... ora cerchiamo di tracciarla:
newdf.plot(kind='bar')

un istogramma spettacoli la distribuzione dei valori in un singolo set di dati (ad esempio, quanti sono compresi tra 3.6 e 3.8). Se vuoi tracciare due cose l'una contro l'altra, probabilmente vuoi solo un grafico a barre. Prova 'plt.bar (df.index, df.Units)' – snorthway
Alcuni dei miei dati sono piuttosto grandi, quindi un grafico a barre non funzionerà. Voglio che "quanti rientrano tra 3.6 e 3.8" sia il numero di unità in modo da poter sempre vedere quante unità sono state vendute in ciascun contenitore. – DigitalMusicology