Попытка создать вложенный словарь из кадра данных pandas

Я пытаюсь создать словарь из фрейма данных, где значение первого столбца является ключом, а внутри него другие столбцы используют комбинацию заголовка и значения для создания словаря.

import pandas as pd

data = [
    [1,'name1', 'surname1'],
    [2,'name2', 'surname2'],
    [3,'name3', 'surname3']
]

df = pd.DataFrame(data,columns=['pkey','first_name', 'last_name'])

wanted_dictionary = {
    1 : {'first_name' : 'name1', 'last_name' : 'surname1'},
    2 : {'first_name' : 'name2', 'last_name' : 'surname2'},
    3 : {'first_name' : 'name3', 'last_name' : 'surname3'},
}

print(wanted_dictionary)

Я пробовал много вариантов, используя to_dict и groupby, но просто не могу их взломать.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте set_index , а затем to_dict:

res = df.set_index("pkey").to_dict("index")
print(res)

Выход

{1: {'first_name': 'name1', 'last_name': 'surname1'},
 2: {'first_name': 'name2', 'last_name': 'surname2'},
 3: {'first_name': 'name3', 'last_name': 'surname3'}}

Вы можете использовать:

df.set_index("pkey").to_dict(orient = "index"))

Это выводит:

{
    "1": {
        "first_name": "name1",
        "last_name": "surname1"
    },
    "2": {
        "first_name": "name2",
        "last_name": "surname2"
    },
    "3": {
        "first_name": "name3",
        "last_name": "surname3"
    }
}
spl = df.to_dict('split')
d = {e[0]:{spl['columns'][1]:e[1],spl['columns'][2]:e[2]} for e in spl['data']}

print(d)
# {
#  1: {'first_name': 'name1', 'last_name': 'surname1'}, 
#  2: {'first_name': 'name2', 'last_name': 'surname2'}, 
#  3: {'first_name': 'name3', 'last_name': 'surname3'}
# }

Другие вопросы по теме