Hola, estoy tratando de cambiar mis datos de largo a ancho en Python. Me confunden algunas de las otras respuestas aquí con una combinación de personas que usan pivote, o set_index y unstack, e indexación jerárquica, etc.
A continuación se muestra un ejemplo de df con 4 columnas y 9 filas. Me gustaría poder pivotar los datos para que haya exactamente 1 fila para cada id única que incluya columnas como Jan 2021 sales de Jan 2021 profit de enero de 2021. Entonces, las ventas y las ganancias tendrían cada una su propia columna para cada mes.
import pandas as pd from datetime import datetime, timedelta sample_df = pd.DataFrame({ 'id': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'month': ['Jan 2021', 'Feb 2021', 'Mar 2021', 'Jan 2021', 'Feb 2021', 'Mar 2021', 'Jan 2021', 'Feb 2021', 'Mar 2021'], 'sales': [100, 200, 300, 400, 500, 600, 700, 800, 900], 'profit': [10, 20, 30, 40, 50, 60, 70, 80, 90]} ) sample_df_pivot = xxxCualquier ayuda sería apreciada !
Prueba esto:
df = sample_df.pivot(columns='month', index='id') df.columns = df.columns.swaplevel().map(' '.join)Producción:
>>> df Feb 2021 sales Jan 2021 sales Mar 2021 sales Feb 2021 profit Jan 2021 profit Mar 2021 profit id 1 200 100 300 20 10 30 2 500 400 600 50 40 60 3 800 700 900 80 70 90¿Es esto lo que estás buscando?
sample_df.pivot(index='id', columns ='month') sales profit month Feb 2021 Jan 2021 Mar 2021 Feb 2021 Jan 2021 Mar 2021 id 1 200 100 300 20 10 30 2 500 400 600 50 40 60 3 800 700 900 80 70 90