Tengo un marco de datos llamado 'datos':

USER   FIELD1
Jack        1
Jill        2
Kane        3

Y un marco de datos separado llamado 'ids' que sirve para usar como tabla de conversión:

ID            ID_NEW
Jack        Jack_NEW
Jill        Jill_NEW
Tyler      TYLER_NEW

¿Cómo puedo iterar a través de 'datos' para reemplazar el valor de USUARIO si se encuentra en el marco de datos de 'ids' mientras mantengo los valores que no se encuentran? Para terminar con algo como:

USER           FIELD1
Jack_NEW            1
Jill_NEW            2
Kane                3
1
stackoverflow 26 ago. 2020 a las 22:01

1 respuesta

La mejor respuesta

Puede hacer esto en un par de pasos. Primero, une los dos DataFrames en "USER = ID" usando pd.merge. Esto dejará nulos en "ID_NEW" donde los dfs no se unen, por lo que ingresa los valores de "USUARIO" para aquellos que usan Series.combine_first. Finalmente, reasigna los nombres de las columnas y filtra solo las columnas que desea conservar.

merged = pd.merge(data, ids, how="left", left_on="USER", right_on="ID")
merged["USER"] = merged["ID_NEW"].combine_first(merged["USER"])
data = merged[["USER", "FIELD1"]]

Si tiene muchas columnas en data, podría hacer data = merged[data.columns] al final.

0
Steven Rouk 26 ago. 2020 a las 19:34