J'ai un dict imbriqué avec la structure suivante: course_id, dict imbriqué avec: 2 cours recommandés et le nombre d'achats pour chaque cours. Par exemple, les entrées de ce dict ressemblent à ceci:
result=pd.DataFrame.from_dict(dicts, orient='index').stack().reset_index() result.columns=['Course ID','Recommended course','Number of purchases']
J'ai essayé ce code pour créer un dataframe à partir de ce dict:
{490: {566: 253, 551: 247},
357: {571: 112, 356: 100},
507: {570: 172, 752: 150}}
Cela ne fonctionne pas tout à fait pour moi, car je veux un sortie où il y aura 5 colonnes. ID du cours, cours recommandé 1, achats 1, cours recommandé 2, achats 2. Existe-t-il une solution à ça? Merci d'avance.
3 Réponses :
Je vous recommande de simplement remodeler votre dictionnaire, puis de recréer votre dataframe, mais vous n'êtes pas loin d'obtenir votre sortie cible à partir de votre dataframe actuel.
nous pouvons groupby et utilisez cumcount pour créer notre colonne unique puis désempiler et attribuer notre colonne à partir de l'en-tête multi-index qui a été créé.
s1 = result.groupby(['Course ID',
result.groupby(['Course ID']).cumcount() + 1]).first().unstack()
s1.columns = [f"{x}_{y}" for x,y in s1.columns]
Recommended course_1 Recommended course_2 Number of purchases_1 \
Course ID
357 571 356 112.0
490 566 551 253.0
507 570 752 172.0
Number of purchases_2
Course ID
357 100.0
490 247.0
507 150.0
Pas efficace, mais devrait fonctionner dans votre cas: -
Course ID Recommended course 1 purchases 1 Recommended Course 2 \ 0 490 566 253 551 1 357 571 112 356 2 507 570 172 752 purchases 2 0 247 1 100 2 150
Résultat: -
df = pd.DataFrame([(k,list(v.keys())[0],list(v.values())[0],list(v.keys())[1],list(v.values())[1]) for k,v in a.items()], columns = ['Course ID','Recommended course 1','purchases 1', 'Recommended Course 2', 'purchases 2']) print(df)
Vous pouvez utiliser la chaîne itertools pour convertir le dict imbriqué en une liste plate de paires de clés et de valeurs et le stocker dans un dictionnaire d2 en utilisant la compréhension du dictionnaire où les clés sont l'identifiant du cours, puis continuez avec la formation du dataframe à l'aide de pandas.
id rec_course1 n_purch_1 rec_course2 n_purch_2 0 490 566 253 551 247 1 357 571 112 356 100 2 507 570 172 752 150
df
import pandas as pd
from itertools import chain
d = {
490: {566: 253, 551: 247},
357: {571: 112, 356: 100},
507: {570: 172, 752: 150}
}
d2 = {k: list(chain.from_iterable(v.items())) for k, v in d.items()}
df = pd.DataFrame.from_dict(d2, orient='index').reset_index()
df.columns = ['id','rec_course1', 'n_purch_1', 'rec_course2', 'n_purch_2']
Veuillez montrer à quoi ressemble la sortie attendue avec une trame de données synthétique.
Oui, et veuillez expliquer ce que contient le dictionnaire imbriqué.