101 votes

Tracé des histogrammes à partir des données groupées dans un DataFrame pandas

Comment tracer un bloc d'histogrammes à partir d'un groupe de données dans un dataframe? Par exemple, étant donné:

from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter': x, 'N': y})

J'ai essayé:

df.groupby('Letter').hist()

...ce qui a échoué avec le message d'erreur:

TypeError: ne peut pas concaténer des objets 'str' et 'float'

1voto

Gabriele Points 109

J'écris cette réponse parce que je cherchais un moyen de tracer ensemble les histogrammes de différents groupes. Ce qui suit n'est pas très intelligent, mais cela fonctionne bien pour moi. J'utilise Numpy pour calculer l'histogramme et Bokeh pour le tracé. Je pense que c'est assez explicite, mais n'hésitez pas à demander des clarifications et je serai heureux d'ajouter des détails (et de mieux l'écrire).

figures = {
    'Transit': figure(title='Transit', x_axis_label='vitesse [km/h]', y_axis_label='fréquence'),
    'Driving': figure(title='Driving', x_axis_label='vitesse [km/h]', y_axis_label='fréquence')
}

cols = {'Vienna': 'red', 'Turin': 'blue', 'Rome': 'Orange'}
for gr in df_trips.groupby(['localité', 'moyens']):
    localité = gr[0][0]
    moyens = gr[0][1]
    fig = figures[moyens]
    h, b = np.histogram(pd.DataFrame(gr[1]).speed.values)
    fig.vbar(x=b[1:], top=h, width=(b[1]-b[0]), legend_label=localité, fill_color=cols[localité], alpha=0.5)

show(gridplot([
    [figures['Transit']],
    [figures['Driving']],
]))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X