Pandas fillna() rellena las filas en un orden específico.
Tengo un problema con el método fillna()
. Este es mi ejemplo de dataframe, que representa la cantidad de artículos en una tienda. Me gustaría llenar todos los NaN. Si hay un NaN, me gustaría llenarlo con valores del día anterior o, si también es NaN, entonces del día siguiente (mismo producto, misma tienda). Si todos los días para un producto y una tienda específicos son NaNs, entonces me gustaría llenarlo con 0. Estoy buscando la mejor manera en pandas para hacerlo, tenía algunas ideas con bucles, pero no se ve muy bien.
Mi dataframe:
day shop product quantity
0 1 shop_A apples 3.0
1 2 shop_A apples NaN
2 3 shop_A apples 1.0
3 1 shop_A bananas NaN
4 2 shop_A bananas NaN
5 3 shop_A bananas NaN
6 1 shop_B apples NaN
7 2 shop_B apples NaN
8 3 shop_B apples 2.0
9 1 shop_B bananas NaN
10 2 shop_B bananas 4.0
11 3 shop_B bananas 2.0
Dataframe esperado:
day shop product quantity
0 1 shop_A apples 3.0
1 2 shop_A apples 3.0
2 3 shop_A apples 1.0
3 1 shop_A bananas 0.0
4 2 shop_A bananas 0.0
5 3 shop_A bananas 0.0
6 1 shop_B apples 2.0
7 2 shop_B apples 2.0
8 3 shop_B apples 2.0
9 1 shop_B bananas 4.0
10 2 shop_B bananas 4.0
11 3 shop_B bananas 2.0
También intenté fillna(limit=3)
, pero eso no es lo que estoy buscando.
davy.ai
Para lograr el df esperado, puedes utilizar el método
fillna
congroupby
yffill
/bfill
.Aquí tienes un fragmento de código que debería funcionar:
La primera línea completa los valores NaN propagando los valores no nulos hacia adelante (
ffill
) y hacia atrás (bfill
) dentro de cada grupo definido por la tienda y el producto.La segunda línea completa cualquier NaN restante con 0.
Al ejecutar este código en el
df
proporcionado, se producirá el resultado esperado.