Tout ce que je veux faire, c'est de renseigner une liste de clients uniques avec leur année de naissance correspondante. La plupart pour l'écrire à mon DF pour remplir ces espaces vides. Les noms de John et Mike apparaissent deux fois sur la liste. John a fourni son année de naissance la première fois qu'il a acheté un article mais n'a pas fait la deuxième fois. Alors que Mike a fait le contraire de ce que John a fait. Vous trouverez ci-dessous un exemple de mon Dataframe sur les transactions des clients.
a_dict = dict(zip(df.cst_names, df.birth_year))
3 Réponses :
J'ai essayé de supprimer d'abord les dates vides, puis zippées. J'espère que cela fonctionne pour vous.
df_altered = df.drop(df[df['birth_year']==''].index) a_dict = dict(zip(df_altered.cst_names, df_altered.birth_year)) a_dict
Oui, ça marche pour moi. Maintenant, je veux utiliser A_DICT pour affecter les lacunes manquantes. Comment puis-je y parvenir possible?
df.loc [df ['birth_year'] == '', "naissance_year"] = [A_DICT [x] pour x dans df.loc [df ["naissance_year '] ==' '," cst_names']]]
J'ai fait ce qui suit et ça marche, mais je pense que c'est assez sale. Dans la première partie, j'ajouterai par défaut l'âge "" et ensuite je l'ai mis à jour avec l'âge que j'ai obtenu. Si vous voulez seulement la naissance non nulle, l'autre réponse que vous avez reçue est bonne.
dict_ = {} list_names = df.cst_names.unique() for name in df.cst_names.unique(): dict_[name]="" df = df[df["birth_year"]!=""] for name in df.cst_names.unique(): dict_[name]= df.loc[df["cst_names"]==name, "birth_year"].values[0]
une version Appliquer
result_dict=df[df['birth_year']!=''].groupby('cst_names').apply(lambda row: row['birth_year']).reset_index()[['cst_names','birth_year']].set_index('cst_names').T.to_dict('list')
df [df.birth_year! = ''] .Reset_index (DROP = true) code>