Autor Tema: Gráfico ordenado por mes

0 Usuarios y 1 Visitante están viendo este tema.

25 Noviembre, 2020, 02:18 am
Leído 1310 veces

Quema

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,765
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Con este código

cancel_mes_portugal.plot.bar(color='darkgreen', figsize=(15,5))
plt.suptitle('Número de cancelaciones en Portugal por mes', fontsize=20)
plt.xlabel('Meses')
plt.ylabel('Count')
plt.xticks(rotation=360)

legend = plt.legend( title="Bookings Cancelados", fontsize='small', fancybox=True)
plt.show()

No me queda ordenado por mes (creciente en el año) , en cambio aparece según el gráfico adjunto. Còmo hago para ordenarlo de enero a diciembre? Los datos son tomados de un dataset.




25 Noviembre, 2020, 03:53 am
Respuesta #1

ingmarov

  • Moderador Global
  • Mensajes: 5,060
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Con este código

cancel_mes_portugal.plot.bar(color='darkgreen', figsize=(15,5))
plt.suptitle('Número de cancelaciones en Portugal por mes', fontsize=20)
plt.xlabel('Meses')
plt.ylabel('Count')
plt.xticks(rotation=360)

legend = plt.legend( title="Bookings Cancelados", fontsize='small', fancybox=True)
plt.show()

No me queda ordenado por mes (creciente en el año) , en cambio aparece según el gráfico adjunto. Còmo hago para ordenarlo de enero a diciembre? Los datos son tomados de un dataset.

Y ¿Dónde esta el datasheet? No has puesto todo el código aquí  ¿verdad?

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

25 Noviembre, 2020, 01:20 pm
Respuesta #2

Quema

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,765
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
La base de datos es larguísima, un ejemplo es éste, ordenado a mano.

import pandas as pd

df = pd.DataFrame([['Feb',254],['Apr',420],['Jan',301],['Mar',449]],columns=['Month','Sales'])

print(df) 

df_ord = pd.DataFrame([['Jan',301],['Feb',254],['Mar',449],['Apr',420]],columns=['Month','Sales'])
print(df_ord)


25 Noviembre, 2020, 04:39 pm
Respuesta #3

ingmarov

  • Moderador Global
  • Mensajes: 5,060
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
La base de datos es larguísima, un ejemplo es éste, ordenado a mano.

import pandas as pd

df = pd.DataFrame([['Feb',254],['Apr',420],['Jan',301],['Mar',449]],columns=['Month','Sales'])

print(df) 

df_ord = pd.DataFrame([['Jan',301],['Feb',254],['Mar',449],['Apr',420]],columns=['Month','Sales'])
print(df_ord)

Sí, pero no nos dices cómo está leyendo los datos o cómo están los datos escritos en el datasheet. Ordenar a mano no es práctico, creo que debes crear un diccionario para poner las cancelaciones por mes.

No necesitas copiar todos los datos, basta con adjuntar el archivo.

Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

06 Marzo, 2021, 06:25 am
Respuesta #4

ingmarov

  • Moderador Global
  • Mensajes: 5,060
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Hola

Dejo una posible solución, para las futuras generaciones  :P


import pandas as pd

df = pd.DataFrame([['Feb',254],['Apr',420],['Jan',301],['Mar',449]],columns=['Month','Sales'])

...

Quizás pandas no ordene nombres de meses, no lo sé, pero podemos definir una función que a cada mes le asigne un entero, así:

Código: [Seleccionar]
def ordenar(Month):
    dic={'Jan':1,'Feb':2,'Mar':3,'Apr':4,'May':5,'Jun':6,'Jul':7,'Aug':8,'Sep':9,'Oct':10,'Nov':11,'Dec':12}
    return(dic[Month])

Agregamos a pd una columna, donde el contenido de sus celdas son función del mes resultan de la función ordenar, notar el diccionario dentro de la función ordenar. Entonces en las lineas donde en el mes contenga 'Jan' esta nueva columna contendrá 1 y de manera similar el resto de datos.

Código: [Seleccionar]
df1['MesN']=df1['Month'].apply(ordenar)


Ahora creamos otro Dataframe ordenado por la nueva columna MesN de datos numéricos.

Código: [Seleccionar]
df2=df1.sort_values(by=['MesN'])

Finalmente podemos graficar escribiendo,

Código: [Seleccionar]
df2.plot.bar(x='Month',y='Sales')

Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...