Estoy trabajando con un marco de datos en Pandas y necesito una solución para modificar automáticamente una de las columnas que tiene valores duplicados. Es un 'objeto' de tipo columna y necesitaría modificar el nombre de los valores duplicados. El marco de datos es el siguiente:
City Year Restaurants 0 New York 2001 20 1 Paris 2000 40 2 New York 1999 41 3 Los Angeles 2004 35 4 Madrid 2001 22 5 New York 1998 33 6 Barcelona 2001 15Como puedes ver, Nueva York se repite 3 veces. Me gustaría crear un nuevo dataframe en el cual este valor se modificaría automáticamente y el resultado sería el siguiente:
City Year Restaurants 0 New York 2001 2001 20 1 Paris 2000 40 2 New York 1999 1999 41 3 Los Angeles 2004 35 4 Madrid 2001 22 5 New York 1998 1998 33 6 Barcelona 2001 15También estaría feliz con "Nueva York 1", "Nueva York 2" y "Nueva York 3". Cualquier opción sería buena.
Use np.where para modificar la columna Ciudad si está duplicada
df['City']=np.where(df['City'].duplicated(keep=False), df['City']+' '+df['Year'].astype(str),df['City'])Un enfoque diferente sin el uso de numpy sería con groupby.cumcount() que le dará su alternativa New York 1, New York 2 pero para todos los valores.
df['City'] = df['City'] + ' ' + df.groupby('City').cumcount().add(1).astype(str) City Year Restaurants 0 New York 1 2001 20 1 Paris 1 2000 40 2 New York 2 1999 41 3 Los Angeles 1 2004 35 4 Madrid 1 2001 22 5 New York 3 1998 33 6 Barcelona 1 2001 15 Para tener un incremento solo en los casos duplicados, puede usar loc :
df.loc[df[df.City.duplicated(keep=False)].index, 'City'] = df['City'] + ' ' + df.groupby('City').cumcount().add(1).astype(str) City Year Restaurants 0 New York 1 2001 20 1 Paris 2000 40 2 New York 2 1999 41 3 Los Angeles 2004 35 4 Madrid 2001 22 5 New York 3 1998 33 6 Barcelona 2001 15