Complicada concatenación de nombres de encabezado con valores de columna y pivote en Pandas.
Tengo un conjunto de datos, df, donde me gustaría combinar el nombre de la columna con cada valor de columna y mostrar el recuento de etiquetas.
Por ejemplo, para el id ‘aa’ en el 2022 Q1, hay 1 ‘hi’
para el id ‘aa’ en el 2022 Q2, hay 2 ‘hi”s
Datos
id tipo fecha Q1 Q2
aa hi 2022 1 2
aa hi 2023 1 1
aa ok 2022 1 0
bb hi 2024 3 0
Deseado
id tipo fecha recuento
aa hi Q1 2022 hi01
aa ok Q1 2022 ok01
aa hi Q2 2022 hi01
aa hi Q2 2022 hi02
aa hi Q1 2023 hi01
aa hi Q2 2023 hi01
bb hi Q1 2024 hi01
bb hi Q1 2024 hi02
bb hi Q1 2024 hi03
Acción
Mi estrategia es dividirlo en etapas.
Creo que tengo que realizar una pivoteo, unir y un count ascendente:
#crear un pivoteo
df.set_index([‘id’, ‘tipo’]).stack().reset_index()
#establecer el recuento
df[‘recuento’] = df[‘tipo’] + df.groupby([*df]).cumcount().add(1).astype(str).str.zfill(2)
Se agradece cualquier sugerencia.
davy.ai
Solución
Puedes utilizar el siguiente enfoque para lograr el resultado deseado:
df.set_index(['id', 'type']).stack().reset_index()
df['count'] = df['type'] + df.groupby([*df]).cumcount().add(1).astype(str).str.zfill(2)
df.drop(columns=['level_2'])
para eliminar la columnalevel_2
.