Ordenar Group by de Pandas de mayor a menor + problema al pasar grafico a PNG

publicado por: Anonymous

Estoy leyendo un csv y graficando en Python usando el siguiente codigo:

import pandas as pd
from matplotlib import pyplot as plt
data = pd.read_csv('Direccion del archivo Csv', header = 0, sep=';')
g = data.groupby(["SUBDETERMINANTE"])["POSITIVAS", "POSIBLES"].sum()

1) ¿Como ordenar g groupby de mayor a menor en base al campo positivas para que al hacer el grafico esten en ese orden?

g.plot(kind='barh', legend='Reverse')
plt.title(u'ANALISIS DE SUBDETERMINANTES', size = 12.0)
plt.xlabel(u'Suma', size = 12.0)
plt.ylabel('SubDeterminantes', size = 12.0)
fig_size = plt.rcParams["figure.figsize"]
print ("Current size:", fig_size)
fig_size[0] = 10.0
fig_size[1] = 15.0
plt.savefig('detalle')

introducir la descripción de la imagen aquí

Mostrar la grafica con los datos de mayor a menor segun el total de positivas:

introducir la descripción de la imagen aquí

2) Al finalizar el grafico lo descargo en PNG, como puedo hacer para que se muestre el nombre entero?

introducir la descripción de la imagen aquí

SOLUCIONADO GRACIAS A LA RESPUESTA DE ABULAFIA

import pandas as pd
from matplotlib import pyplot as plt
data = pd.read_csv('Direccion donde esta el archivo csv', header = 0, sep=';')
g = data.groupby(["SUBDETERMINANTE"])["POSITIVAS", 
"POSIBLES"].sum().sort_values(by="POSITIVAS")
g.plot(kind='barh', legend='Reverse')
plt.title(u'ANALISIS DE SUBDETERMINANTES', size = 12.0)
plt.xlabel(u'Suma', size = 12.0)
plt.ylabel('SubDeterminantes', size = 12.0)
fig_size = plt.rcParams["figure.figsize"]
print ("Current size:", fig_size)
fig_size[0] = 10.0
fig_size[1] = 15.0
plt.savefig('detalle', bbox_inches='tight')

Documentación sort_values para dataframe en Pandas:

introducir la descripción de la imagen aquí

solución

Al no disponer de tus datos no puedo verificar si mi respuesta es correcta. En todo caso, creo que sería de la forma siguiente:

1. Ordenar el dataframe

Los dataframes tienen el método sort_values(). Prueba por tanto lo siguiente:

g = (data.groupby(["SUBDETERMINANTE"])["POSITIVAS", "POSIBLES"]
     .sum()
     .sort_values(by="POSITIVAS"))

(los paréntesis con que rodeé todo son un truco para poder partir la expresión en
varias líneas, para mejor legibilidad, puedes ponerlo todo en una sola línea y sin los paréntesis, si prefieres)

2. Exportación de imagen

No me queda claro cómo la exportas, si mediante savefig() o a través de alguna opcion de tu interfaz gráfica de usuario. Si es con savefig() a menudo los problemas de este estilo se resuelven pasándole el parámetro bbox_inches='tight'

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *