Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

322
Views
Cómo convertir el marco de datos de pandas en un diccionario anidado

Estoy ejecutando Python 3.6 y Pandas 0.19.2 y tengo un DataFrame que tiene el siguiente aspecto:

 Name Chain Food Healthy George McDonalds burger False George KFC chicken False John Wendys burger False John McDonalds salad True

Quiero transformar este marco de datos en un dictado que se vea de la siguiente manera:

 health_data = {'George': {'McDonalds': {'Food': 'burger', 'Healthy':False}, 'KFC': {'Food': 'chicken', 'Healthy':False}}, 'John': {'Wendys': {'Food': 'burger', 'Healthy':False}, 'McDonalds': {'Food': 'salad', 'Healthy': True}}}

Mis pensamientos hasta ahora son:

  1. Use df.groupby para agrupar la columna de nombres
  2. Use df.to_dict() para transformar el marco de datos en un diccionario como: health_data = input_data.set_index('Chain').T.to_dict()

¿Pensamientos? Gracias de antemano por la ayuda.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Creo que estabas muy cerca.

Use groupby y to_dict :

 df = df.groupby('Name')[['Chain','Food','Healthy']] .apply(lambda x: x.set_index('Chain').to_dict(orient='index')) .to_dict() print (df) {'George': {'KFC': {'Healthy': False, 'Food': 'chicken'}, 'McDonalds': {'Healthy': False, 'Food': 'burger'}}, 'John': {'McDonalds': {'Healthy': True, 'Food': 'salad'}, 'Wendys': {'Healthy': False, 'Food': 'burger'}}}
over 4 years ago · Santiago Trujillo Report

0

Solución usando comprensión de diccionario y groupby :

 {n: grp.loc[n].to_dict('index') for n, grp in df.set_index(['Name', 'Chain']).groupby(level='Name')} {'George': {'KFC': {'Food': 'chicken', 'Healthy': False}, 'McDonalds': {'Food': 'burger', 'Healthy': False}}, 'John': {'McDonalds': {'Food': 'salad', 'Healthy': True}, 'Wendys': {'Food': 'burger', 'Healthy': False}}}

Solución usando defaultdict :

 from collections import defaultdict d = defaultdict(dict) for i, row in df.iterrows(): d[row.Name][row.Chain] = row.drop(['Name', 'Chain']).to_dict() dict(d) {'George': {'KFC': {'Food': 'chicken', 'Healthy': False}, 'McDonalds': {'Food': 'burger', 'Healthy': False}}, 'John': {'McDonalds': {'Food': 'salad', 'Healthy': True}, 'Wendys': {'Food': 'burger', 'Healthy': False}}}
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!