algo muy similar a la pivot_table son las tablas dinámicas utilizadas en las hojas de calculo.
Librerías de manipulación de datos con Python
¿Por qué NumPy y Pandas?
NumPy
NumPy Array
Tipos de datos
Dimensiones
Creando arrays
Shape y Reshape
Funciones principales de NumPy
Copy
Condiciones
Operaciones
Quiz: NumPy
Pandas
Series y DataFrames en Pandas
Leer archivos CSV y JSON con Pandas
Filtrado con loc y iloc
Agregar o eliminar datos con Pandas
Manejo de datos nulos
Filtrado por condiciones
Funciones principales de Pandas
groupby
Combinando DataFrames
Merge y Concat
Join
Pivot y Melt
Apply
Quiz: Pandas
Cierre
Posibilidades con Pandas y NumPy
Lectura
Hola, te doy la bienvenida a la clase de pivot_table y melt, dos funciones que sirven para cambiar la estructura de nuestro DataFrame de acuerdo a nuestras necesidades.
Esta función puede traer recuerdos a las personas interesadas en el mundo del SQL, ya que Oracle, PostgreSQL y otros motores de bases de datos la tienen implementada desde hace muchos años. Pivot, básicamente, transforma los valores de determinadas columnas o filas en los índices de un nuevo DataFrame, y la intersección de estos es el valor resultante.
Entiendo que esto puede sonar algo confuso, pero no te preocupes, todo queda mucho más claro con un ejemplo.
Para comenzar, crea un nuevo Jupyter Notebooks, puedes usar Google Colab o la notebook de tu preferencia que estés utilizando para este curso.
Carga el DataFrame que hemos usado en el curso:
df_books = pd.read_csv('bestsellers with categories.csv',sep=',',header=0)
df_books.head()
pivot_table
:df_books.pivot_table(index='Author',columns='Genre',values='User Rating')
Como resultado, los valores de Author
pasan a formar el índice por fila y los valores de Genre
pasan a formar parte de los índices por columna, y el User Rating
se mantiene como valor.
Por supuesto, para este caso, un Author
suele tener un solo género literario, así que no es una transformación muy útil, pero veamos si podemos lograr algo mejor.
df_books.pivot_table(index='Genre',columns='Year', values='User Rating',aggfunc='sum')
En este caso tenemos por cada género, la suma a lo largo de los años. Esto es mucho más interesante, ¿verdad? La mejor noticia es que no solo podemos obtener la suma, también podemos obtener la media, la desviación estándar, el conteo, la varianza, etc. Únicamente con cambiar el parámetro aggfunc
que traduce función de agrupamiento.
El método melt toma las columnas del DataFrame y las pasa a filas, con dos nuevas columnas para especificar la antigua columna y el valor que traía.
Por ejemplo, simplemente al imprimir las cinco primeras filas del DataFrame con las columnas de Name
y Genre
se tiene este resultado.
df_books[['Name','Genre']].head(5)
df_books[['Name','Genre']].head(5).melt()
Ahora cada resultado de las dos columnas pasa a una fila de este modo a tipo llave:valor.
df_books.melt(id_vars='Year',value_vars='Genre')
Simplemente, podemos seleccionar las columnas que no quiero hacer melt
usando el parámetro id_vars
. Para este caso Year
y también la única columna que quiero aplicar el melt
, para este caso Genre
con la propiedad value_vars
.
Hemos conocido pivot y melt, dos herramientas muy útiles para manipular nuestros DataFrames.
Te espero en la siguiente clase donde conoceremos cómo utilizar Apply.
Aportes 7
Preguntas 2
algo muy similar a la pivot_table son las tablas dinámicas utilizadas en las hojas de calculo.
Wow!! ya con esto se empieza a ver más del potencial de estas herramientas
Un parámetro intenresante de esta función es el fill_value:
el cual nos permitirá determinar con que contenido queremos visualizar los valores NaN, para este ejemplo uso el caracter " - " :
En melt podemos adicionalmente con parámetros determinar el nombre de nuestras columnas usando:
var_name='nombre_columna_variables
value_name='nombre_columna_valores'
Cordial Saludo,
lo hice con una base propia
REMISION variable value
0 '208010808396 CLIENTE 'RYMCO MEDICAL S.A.S
1 '276020041637 CLIENTE 'CARVAJAL EDUCACION S.A.S.
2 '276020041638 CLIENTE 'CARVAJAL EDUCACION S.A.S.
3 '276020041639 CLIENTE 'CARVAJAL EDUCACION S.A.S.
4 '276020041640 CLIENTE 'CARVAJAL EDUCACION S.A.S.
La verdad es que estas herramientas son de gran ayuda en el análisis de datos y sobre todo con grande volúmenes de datos, que es en donde Excel hace “aguas”.
Hay 2 formas de generar el inverso de MELT. Una es usando PIVOT y otra PIVOT_TABLE.
https://stackoverflow.com/questions/22127569/opposite-of-melt-in-python-pandas
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.