Я пытаюсь создать словарь из фрейма данных, где значение первого столбца является ключом, а внутри него другие столбцы используют комбинацию заголовка и значения для создания словаря.
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, но просто не могу их взломать.
Используйте 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'}
# }