¿Cómo hacer coincidir una cadena y organizar el dataframe en consecuencia?
Tengo el input df1 y df2.
df1:
Subcategory_Desc Segment_Desc Flow Side Row_no
APPLE APPLE LOOSE Apple Kanzi Front Row 1
APPLE APPLE LOOSE Apple Jazz Front Row 1
CITRUS ORANGES LOOSE Orange Navel Front Row 1
PEAR PEARS LOOSE Lemon Right End Row 1
AVOCADOS AVOCADOS LOOSE Avocado Back Row 1
TROPICAL FRUIT KIWI FRUIT Kiwi Gold Back Row 1
TROPICAL FRUIT KIWI FRUIT Kiwi Green Left End Row 1
df2:
Subcategory_Desc Segment_Desc Flow
TROPICAL FRUIT KIWI FRUIT 5pk Kids Kiwi
APPLE APPLE LOOSE Apple GoldenDel
AVOCADOS AVOCADOS LOOSE bandeja de aguacate
Escenario:
Las filas del dataframe df2 deben ser insertados en el dataframe df1 considerando la siguiente condición:
1. Comprobar la Subcategory_Desc y Segment_Desc similares de df2 en df1 e insertar esa fila de df2 al final de ese Side (Front/Back), como se muestra en el resultado esperado.
2. También es necesario considerar la columna Row_no, porque el conjunto de datos original tiene múltiples números de fila, pero en este caso solo se ha dado la fila 1 para los datos de ejemplo.
Resultado esperado:
Subcategory_Desc Segment_Desc Flow Side Row_no
APPLE APPLE LOOSE Apple Kanzi Front Row 1
APPLE APPLE LOOSE Apple Jazz Front Row 1
CITRUS ORANGES LOOSE Orange Navel Front Row 1
APPLE APPLE LOOSE Apple GoldenDel Front Row 1
PEAR PEARS LOOSE Lemon Right End Row 1
AVOCADOS AVOCADOS LOOSE Avocado Back Row 1
TROPICAL FRUIT KIWI FRUIT Kiwi Gold Back Row 1
TROPICAL FRUIT KIWI FRUIT 5pk Kids Kiwi Back Row 1
AVOCADOS AVOCADOS LOOSE bandeja de aguacate Back Row 1
TROPICAL FRUIT KIWI FRUIT Kiwi Green Left End Row 1
No estoy seguro de cuál sería la lógica más sencilla para este caso.
davy.ai
Un enfoque para obtener la salida esperada es utilizando la función merge de pandas. Podemos combinar los dataframes df1 y df2 en las columnas Subcategory_Desc y Segment_Desc con una unión exterior para asegurarnos de incluir todas las filas. Luego, podemos crear una nueva columna llamada Position que asigna a cada fila su posición correspondiente al final de Side. Finalmente, podemos ordenar el dataframe por las columnas Side y Position para obtener la salida esperada.
Aquí está el código para obtener la salida esperada:
Esto debería producir la salida esperada: