Tengo un marco de datos que representa un conjunto de datos de la cadena minorista. Tiene columnas Item_Identifier, Item_Weight, Item_MRP, Outlet_Identifier. La columna Item_Weight, que representa el peso del artículo en particular en gramos, y es numérica, tiene ciertos valores faltantes. La columna Item_Weight tiene valores faltantes para los artículos donde la columna Outlet_Identifier = OUT019 o OUT027. Sin embargo, el mismo artículo (identificado por Item_Identifier) en una fila diferente con otro Outlet_Identifier (que no sea OUT019 o OUT027) tiene Item_Weight presente y se puede usar para sustituir el Item_Weight faltante por Outlet_Identifier (OUT019 o OUT027).
He escrito el siguiente código pero parece tener un problema. Y laso no es la forma más limpia de hacer:
items = df_train[df_train.Outlet_Identifier == "OUT019"]['Item_Identifier']
listItems = []
for i in items:
u = df_train.query('(Item_Identifier == @i) & (Outlet_Identifier !=
"OUT019") & (Outlet_Identifier != "OUT027")').head(1)
if not u.empty:
listItems.append(u.at[u.index[0],'Item_Weight'])
df_rep = pd.concat([items.reset_index(),pd.DataFrame(listItems)],axis=1)
df_rep.columns = ['row', 'Item_Identifier', 'Item_Weight']
for index, row in df_rep.iterrows():
df_train.loc[df_train.Item_Identifier == row.Item_Identifier ]
['Item_Weight']= row['Item_Weight']
Necesito ayuda.
df['Item_Weight'] = df.groupby(['Item_Identifier','Outlet_Identifier'])['Item_Weight'].ffill()
df['Item_Weight'] = df.groupby(['Item_Identifier','Outlet_Identifier'])['Item_Weight'].bfill()
Esto debería solucionar tu problema. El ffill()
va a mirar todos los siguientes filas para ver si tiene algo disponible y se llenarlo y bfill()
se verá en las filas anteriores para llenar los valores nulos.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras