#python #pandas #dataframe
Вопрос:
Заранее благодарю всех за помощь.
У меня есть фрейм данных, подобный этому:
идентификатор клиента | product_id | имя продукта | временная метка_составлена | product_constraint |
---|---|---|---|---|
азбука | fi2k | луг | 2021 | нулевой |
азбука | fi2j | февраль | 2021 | нулевой |
азбука | фкн | розенкранц | 2021 | скн |
кбр | 01x | получить | 2021 | лок |
кбр | 018 | los | 2021 | hnc |
кбр | 018 | внг | 2021 | hnc |
Мне нужно сделать диктант этого df. Пожалуйста, обратите внимание, что client_id не уникален, идентификатор клиента события как pk и идентификатор продукта не уникален. Просто комбинация client_id, product_id и product_constraint (которая в некоторых случаях может быть равна нулю) создает идеальный уникальный идентификатор.
Мой диктант должен быть таким:
{ "abc":[ { "product_id":"fi2k", "product_name": "loug", "timestamp_added": 2021, "product_constraint": null }, { "product_id":"fi2j", "product_name": "feb", "timestamp_added": 2021, "product_constraint": null }, { ... } ], "cbd":[ { ... }, { ... }, { ... } ] }
После этого я буду использовать этот диктант для вставки данных в dynamodb.
Ответ №1:
попробуйте это:
from pprint import pprint outdict = {} # create output dictionary df = df.set_index('client_id') # set index and group dfg = df.groupby(df.index) #iterate through groups populating the dictionary for grp in dfg.groups: g = dfg.get_group(grp) # print(g.to_dict('records')) outdict[grp] = g.to_dict('records') pprint(outdict) {'abc': [{'product_constraint': nan, 'product_id': 'fi2k', 'product_name': 'loug', 'timestamp_added': 2021}, {'product_constraint': nan, 'product_id': 'fi2j', 'product_name': 'feb', 'timestamp_added': 2021}, {'product_constraint': 'skn', 'product_id': 'fkn', 'product_name': 'ros', 'timestamp_added': 2021}], 'cbd': [{'product_constraint': 'lok', 'product_id': '01x', 'product_name': 'get', 'timestamp_added': 2021}, {'product_constraint': 'hnc', 'product_id': '018', 'product_name': 'los', 'timestamp_added': 2021}, {'product_constraint': 'hnc', 'product_id': '018', 'product_name': 'vng', 'timestamp_added': 2021}]}