Я пытаюсь преобразовать приведенный ниже фрейм данных в словарь

Кадр данных:

import pandas as pd
df = pd.DataFrame({'a':['A','A','B','B','B','C'], 'b':[1,2,5,5,4,6], 'c':[4,3,5,5,5,3], 'd':[3,4,5,5,7,8]})
print(df)

Пример фрейма данных:

   a  b  c  d
0  A  1  4  3
1  A  2  3  4
2  B  5  5  5
3  B  5  5  5
4  B  4  5  7
5  C  6  3  8

Мне потребовался этот фрейм данных в формате словаря, упомянутого ниже.

[{"a":"A","data_values":[{"b":1,"c":4,"d":3},{"b":2,"c":3,"d":4}]}, 
 {"a":"B","data_values":[{"b":5,"c":5,"d":5},{"b":5,"c":5,"d":5}, 
 {"b":4,"c":5,"d":7}]},{"a":"C","data_values":[{"b":6,"c":3,"d":8}]}]
2
Divya Bojanpalli 15 Сен 2020 в 09:21

1 ответ

Лучший ответ

Используйте DataFrame.groupby с настраиваемой лямбда-функцией для преобразования значений в словари с помощью DataFrame.to_dict:

L = (df.set_index('a')
       .groupby('a')
       .apply(lambda x: x.to_dict('records'))
       .reset_index(name='data_values')
       .to_dict('records')
       )
print (L)
[{'a': 'A', 'data_values': [{'b': 1, 'c': 4, 'd': 3}, 
                            {'b': 2, 'c': 3, 'd': 4}]}, 
 {'a': 'B', 'data_values': [{'b': 5, 'c': 5, 'd': 5}, 
                            {'b': 5, 'c': 5, 'd': 5},
                            {'b': 4, 'c': 5, 'd': 7}]}, 
 {'a': 'C', 'data_values': [{'b': 6, 'c': 3, 'd': 8}]}]
0
jezrael 15 Сен 2020 в 06:24