J'ai besoin de votre aide pour résoudre la fin de mon script.
Le problème est que je dois obtenir à partir de ce tableau
ID CITY_1 CITY_2 CITY_3 CITY_4 CITY_5 105274551 Roma 0 0 0 0 104746182 Roma 0 0 0 0 105486829 Roma 0 0 0 0 105479022 Roma 0 0 0 0 105307655 Roma Genova Firenze 0 0 105384177 Roma Milano Reggio Napoli 0 105486831 Aosta 0 0 0 0 105486833 Milano 0 0 0 0 105486835 Verona 0 0 0 0 105486836 Firenze 0 0 0 0
ce tableau:
ID CITY 105274551 Roma 104746182 Roma 105486829 Roma 105479022 Roma 105307655 Roma 105384177 Roma 105384177 Milano 105384177 Reggio 105486831 Aosta 105384177 Milano 105486833 Milano 105384177 Napoli 105486835 Verona 105486836 Firenze 105307655 Genova 105307655 Firenze
Mon objectif est pour créer autant de colonnes qu'il y a de valeurs dans la colonne de ville.
J'aimerais savoir s'il existe une bibliothèque ou un tutoriel / réponse qui pourrait m'aider à créer ce type de script.
Merci d'avance.
Francesco
3 Réponses :
Nous pouvons créer une nouvelle colonne avec "CITY" et son numéro de ligne ( col ) pour chaque ID , puis obtenir les données au format large.
df <- structure(list(ID = c(105274551L, 104746182L, 105486829L, 105479022L,
105307655L, 105384177L, 105384177L, 105384177L, 105486831L, 105384177L,
105486833L, 105384177L, 105486835L, 105486836L, 105307655L, 105307655L
), CITY = c("Roma", "Roma", "Roma", "Roma", "Roma", "Roma", "Milano",
"Reggio", "Aosta", "Milano", "Milano", "Napoli", "Verona", "Firenze",
"Genova", "Firenze")), row.names = c(NA, -16L), class = "data.frame")
105307655 ['Roma', 'Milano', 'Reggio', 'Napoli'] 105479022 ['Roma'] 105486833 ['Milano']
import pandas as pd
#taken sample records only
dict1={'ID':[105307655,105479022,105307655,105307655,105486833,105307655],'CITY':[ 'Roma','Roma','Milano','Reggio','Milano','Napoli']}
df=pd.DataFrame(dict1)
dictfinal={}
for i in range(0,len(dict1['ID'])):
key=dict1['ID'][i]
if ID as key is already present in dictionary just append the city to value
if(key in dictfinal.keys()):
dictfinal[key].append(dict1['CITY'][i])
#if ID is not present in dictionary ,then first add ID as key to dictionary and the add value as list to dictionary.
adding value as list because we can append more cities to list
else:
dictfinal[key]=[dict1['CITY'][i]]
#printing final dictionary
for k,v in dictfinal.items():
print(k,v)
Merci pour votre réponse, mais la langue est R.
Nous pouvons utiliser dcast de data.table
df <- structure(list(ID = c(105274551L, 104746182L, 105486829L, 105479022L,
105307655L, 105384177L, 105384177L, 105384177L, 105486831L, 105384177L,
105486833L, 105384177L, 105486835L, 105486836L, 105307655L, 105307655L
), CITY = c("Roma", "Roma", "Roma", "Roma", "Roma", "Roma", "Milano",
"Reggio", "Aosta", "Milano", "Milano", "Napoli", "Verona", "Firenze",
"Genova", "Firenze")), row.names = c(NA, -16L), class = "data.frame")
library(data.table)
dcast(setDT(df), ID ~ paste0("CITY_", rowid(ID)), value.var = 'CITY')
# ID CITY_1 CITY_2 CITY_3 CITY_4 CITY_5
# 1: 104746182 Roma <NA> <NA> <NA> <NA>
# 2: 105274551 Roma <NA> <NA> <NA> <NA>
# 3: 105307655 Roma Genova Firenze <NA> <NA>
# 4: 105384177 Roma Milano Reggio Milano Napoli
# 5: 105479022 Roma <NA> <NA> <NA> <NA>
# 6: 105486829 Roma <NA> <NA> <NA> <NA>
# 7: 105486831 Aosta <NA> <NA> <NA> <NA>
# 8: 105486833 Milano <NA> <NA> <NA> <NA>
# 9: 105486835 Verona <NA> <NA> <NA> <NA>
#10: 105486836 Firenze <NA> <NA> <NA> <NA>