Я использую pandas groupby и применяю к go из DataFrame, содержащего 150 миллионов строк со следующими столбцами:
Id Created Item Stock Price
1 2019-01-01 Item 1 200 10
1 2019-01-01 Item 2 100 15
2 2019-01-01 Item 1 200 10
К списку из 2,2 миллиона записей, который выглядит следующим образом :
[{
"Id": 1,
"Created": "2019-01-01",
"Items": [
{"Item":"Item 1", "Stock": 200, "Price": 10},
{"Item":"Item 2", "Stock": 100, "Price": 5}
]
},
{
"Id": 2,
"Created": "2019-01-01",
"Items": [
{"Item":"Item 1", "Stock": 200, "Price": 10}
]
}]
В основном используя эту строку кода:
df.groupby(['Id', 'Created']).apply(lambda x: x[['Item', 'Stock', 'Price']].to_dict(orient='records'))
Это занимает довольно много времени, и, насколько я понимаю, подобные операции тяжелы для pandas. Есть ли не pandas способ выполнить sh такой же, но с большей производительностью?
Редактировать : операция занимает 55 минут, я использую ScriptProcessor в AWS, что позвольте мне указать количество энергии, которое я хочу.
Редактировать 2 : Итак, с помощью решения artonas я подхожу ближе: вот что мне удается произвести сейчас:
defaultdict(<function __main__.<lambda>()>,
{'1': defaultdict(list,
{'Id': '1',
'Created':'2019-01-01',
'Items': [{'Item': Item2, 'Stock': 100, 'Price': 15},
{'Item': Item1, 'Stock': 200, 'Price': 10}]
})
},
{'2': defaultdict(list,
{'Id': '2',
'Created':'2019-01-01',
'Items': [{'Item': Item1, 'Stock': 200, 'Price': 10}]
})
},
Но как сделать go из вышесказанного, к этому?
[{
"Id": 1,
"Created": "2019-01-01",
"Items": [
{"Item":"Item 1", "Stock": 200, "Price": 10},
{"Item":"Item 2", "Stock": 100, "Price": 5}
]
},
{
"Id": 2,
"Created": "2019-01-01",
"Items": [
{"Item":"Item 1", "Stock": 200, "Price": 10}
]
}]
По сути, меня интересует только часть после "defaultdict (list") для всех записей. Мне нужно, чтобы он был в списке это не зависит от Id в качестве ключа.
Редактировать 3 : Последнее обновление, содержащее результаты для моего набора производственных данных. С принятым ответом, предоставленным artona, мне удалось go от 55 минут до 7 (!) Минут. И без каких-либо серьезных изменений в моем коде. Решение, предоставленное Phung Duy Phong, заняло у меня от 55 минут до 17, что тоже неплохо.