Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

563
Vistas
Diagrama de barras de pandas con rango agrupado

¿Hay alguna manera de crear un gráfico de barras a partir de datos continuos agrupados en intervalos predefinidos? Por ejemplo,

 In[1]: df Out[1]: 0 0.729630 1 0.699620 2 0.710526 3 0.000000 4 0.831325 5 0.945312 6 0.665428 7 0.871845 8 0.848148 9 0.262500 10 0.694030 11 0.503759 12 0.985437 13 0.576271 14 0.819742 15 0.957627 16 0.814394 17 0.944649 18 0.911111 19 0.113333 20 0.585821 21 0.930131 22 0.347222 23 0.000000 24 0.987805 25 0.950570 26 0.341317 27 0.192771 28 0.320988 29 0.513834 231 0.342541 232 0.866279 233 0.900000 234 0.615385 235 0.880597 236 0.620690 237 0.984375 238 0.171429 239 0.792683 240 0.344828 241 0.288889 242 0.961686 243 0.094402 244 0.960526 245 1.000000 246 0.166667 247 0.373494 248 0.000000 249 0.839416 250 0.862745 251 0.589873 252 0.983871 253 0.751938 254 0.000000 255 0.594937 256 0.259615 257 0.459916 258 0.935065 259 0.969231 260 0.755814

y en lugar de un simple histograma:

 df.hist()

histograma habitual de df

Necesito crear un gráfico de barras, donde cada barra contará una cantidad de instancias dentro de un rango predefinido. Por ejemplo, la siguiente gráfica debe tener tres barras con el número de puntos que caen en: [0 0.35], [0.35 0.7] [0.7 1.0]

EDITAR

Muchas gracias por tus respuestas. Otra pregunta, ¿cómo pedir contenedores? Por ejemplo, obtengo el siguiente resultado:

 In[349]: out.value_counts() Out[349]: [0, 0.001] 104 (0.001, 0.1] 61 (0.1, 0.2] 32 (0.2, 0.3] 20 (0.3, 0.4] 18 (0.7, 0.8] 6 (0.4, 0.5] 6 (0.5, 0.6] 5 (0.6, 0.7] 4 (0.9, 1] 3 (0.8, 0.9] 2 (1, 1.001] 0

como puede ver, los últimos tres contenedores no están ordenados. ¿Cómo ordenar el marco de datos según las 'categorías' o mis contenedores?

EDITAR 2

Acabo de encontrar cómo resolverlo, simplemente con 'reindex ()':

 In[355]: out.value_counts().reindex(out.cat.categories) Out[355]: [0, 0.001] 104 (0.001, 0.1] 61 (0.1, 0.2] 32 (0.2, 0.3] 20 (0.3, 0.4] 18 (0.4, 0.5] 6 (0.5, 0.6] 5 (0.6, 0.7] 4 (0.7, 0.8] 6 (0.8, 0.9] 2 (0.9, 1] 3 (1, 1.001] 0
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede utilizar pd.cut para dividir los valores en contenedores correspondientes a cada intervalo y luego tomar los recuentos totales de cada intervalo mediante pd.value_counts . Trace un gráfico de barras más tarde, además, reemplace las etiquetas de marca del eje X con el nombre de la categoría a la que pertenece esa marca en particular.

 out = pd.cut(s, bins=[0, 0.35, 0.7, 1], include_lowest=True) ax = out.value_counts(sort=False).plot.bar(rot=0, color="b", figsize=(6,4)) ax.set_xticklabels([c[1:-1].replace(","," to") for c in out.cat.categories]) plt.show()

ingrese la descripción de la imagen aquí


Si desea que el eje Y se muestre como porcentajes relativos, normalice los recuentos de frecuencia y multiplique ese resultado por 100.

 out = pd.cut(s, bins=[0, 0.35, 0.7, 1], include_lowest=True) out_norm = out.value_counts(sort=False, normalize=True).mul(100) ax = out_norm.plot.bar(rot=0, color="b", figsize=(6,4)) ax.set_xticklabels([c[1:-1].replace(","," to") for c in out.cat.categories]) plt.ylabel("pct") plt.show()

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Puede considerar usar matplotlib para trazar el histograma. A diferencia de la función hist de pandas, matplotlib.pyplot.hist acepta una matriz como entrada para los contenedores.

 import numpy as np; np.random.seed(0) import matplotlib.pyplot as plt import pandas as pd x = np.random.rand(120) df = pd.DataFrame({"x":x}) bins= [0,0.35,0.7,1] plt.hist(df.values, bins=bins, edgecolor="k") plt.xticks(bins) plt.show()

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Puedes usar pd.cut

 bins = [0,0.35,0.7,1] df = df.groupby(pd.cut(df['val'], bins=bins)).val.count() df.plot(kind='bar')

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda