Básicamente, tengo 2 marcos de datos, y df1
tengo 5 semanas solo.df2
df1
df2
Tengo la misma columna de año /semana con una columna de producto.
Entonces, si una de esas filas df2
no está en df1
, estoy buscando agregar el producto en ese año/semana respectivamente.
df1:
+----+-------------+
| | year/week |
+====+=============+
| 0 | 2022/01 |
+----+-------------+
| 1 | 2022/02 |
+----+-------------+
| 2 | 2022/03 |
+----+-------------+
| 3 | 2022/04 |
+----+-------------+
| 4 | 2022/05 |
+----+-------------+
df2:
+----+-------------+-----------+
| | year/week | product |
+====+=============+===========+
| 0 | 2022/01 | A |
+----+-------------+-----------+
| 1 | 2022/02 | A |
+----+-------------+-----------+
| 2 | 2022/01 | B |
+----+-------------+-----------+
| 3 | 2022/04 | B |
+----+-------------+-----------+
| 4 | 2022/05 | C |
+----+-------------+-----------+
este es el resultado esperado que quiero obtener, ¿hay una forma pitónica de obtener esto?
+----+-------------+-----------+
| | year/week | product |
+====+=============+===========+
| 0 | 2022/01 | A |
+----+-------------+-----------+
| 1 | 2022/02 | A |
+----+-------------+-----------+
| 2 | 2022/03 | A |
+----+-------------+-----------+
| 3 | 2022/04 | A |
+----+-------------+-----------+
| 4 | 2022/05 | A |
+----+-------------+-----------+
| 5 | 2022/01 | B |
+----+-------------+-----------+
| 6 | 2022/02 | B |
+----+-------------+-----------+
| 7 | 2022/03 | B |
+----+-------------+-----------+
| 8 | 2022/04 | B |
+----+-------------+-----------+
| 9 | 2022/05 | B |
+----+-------------+-----------+
| 10 | 2022/01 | C |
+----+-------------+-----------+
| 11 | 2022/02 | C |
+----+-------------+-----------+
| 12 | 2022/03 | C |
+----+-------------+-----------+
| 13 | 2022/04 | C |
+----+-------------+-----------+
| 14 | 2022/05 | C |
+----+-------------+-----------+
Solución del problema
Puede crear un producto cartesiano a partir de la columna "año/semana" df1
y los "productos" únicos df2
y convertirlo en un DataFrame. Puede omitir sort_values
si no le importa especialmente el orden.
out = (pd.MultiIndex.from_product([df1['year/week'], df2['product'].unique()],
names=['year/week','product']).to_frame()
.reset_index(drop=True).sort_values(by='product', ignore_index=True))
Producción:
year/week product
0 2022/01 A
1 2022/02 A
2 2022/03 A
3 2022/04 A
4 2022/05 A
5 2022/01 B
6 2022/02 B
7 2022/03 B
8 2022/04 B
9 2022/05 B
10 2022/01 C
11 2022/02 C
12 2022/03 C
13 2022/04 C
14 2022/05 C
No hay comentarios.:
Publicar un comentario