¿Cómo combinar un dataframe con cada grupo creado por groupby?
Dado df1 y df2:
df1:
id | item | sub_item |
---|---|---|
1 | 52 | AAA |
2 | 52 | AAA |
3 | 55 | BAA |
4 | 77 | CAA |
5 | 77 | CAA |
6 | 77 | CAA |
7 | 77 | CAB |
8 | 77 | CAC |
df2:
id | color |
---|---|
1 | #11 |
2 | #12 |
3 | #13 |
4 | #14 |
5 | #17 |
6 | #18 |
7 | #19 |
8 | #20 |
9 | #21 |
10 | #25 |
producir df_resultado:
id | item | sub_item | color |
---|---|---|---|
1 | 52 | AAA | #11 |
2 | 52 | AAA | #11 |
3 | 55 | BAA | #11 |
4 | 77 | CAA | #11 |
5 | 77 | CAA | #11 |
6 | 77 | CAA | #11 |
7 | 77 | CAB | #12 |
8 | 77 | CAC | #13 |
El campo “id” no es importante. Cada nuevo subítem, dentro de un grupo de items, recibe un nuevo número de color de serie. Los colores vuelven a asignarse desde #11 para cada nuevo item. df2 siempre será lo suficientemente largo para cubrir los subítems únicos dentro de un grupo de items.
Mi intuición dice que debemos usar “groupby” en df1, luego combinar cada grupo con df2, pero necesito ayuda con el código para lograr esto.
davy.ai
Primero, necesitamos crear una nueva columna en
df1
que represente la combinación única de item-sub_item para cada fila.Luego, podemos ordenar
df1
poritem
ysub_item
.A continuación, necesitamos crear una nueva columna en
df1
que represente el número de color serial para cada combinación de item-sub_item. Utilizaremosgroupby
ycumcount
para lograr esto.Ahora, podemos fusionar
df1
ydf2
encolor_num
. Solo mantendremos las columnasid
ycolor
dedf2
.Finalmente, podemos eliminar las columnas innecesarias de
df1
ydf_result
.El resultado obtenido en
df_result
debería coincidir con la salida deseada.