es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Puedes utilizar el siguiente enfoque para lograr el resultado deseado:

    1. Crea un pivote del dataframe usando df.set_index(['id', 'type']).stack().reset_index()
    2. Establece el contador usando df['count'] = df['type'] + df.groupby([*df]).cumcount().add(1).astype(str).str.zfill(2)
    3. Finalmente, utiliza df.drop(columns=['level_2']) para eliminar la columna level_2.

Comments are closed.