Я имею дело с функцией, которая работает правильно, но не так быстро, как хотелось бы. Эта функция имеет массив входных данных вида:
item = [{
"var0057":31,
"var0001":"A",
"var0002":2,
"data":[{
"var0046":"tr100",
"var0055":55,
"var0054":1000,
"var0058":2038
},
{
"var0046":"tr200",
"var0055":12,
"var0054":8000,
"var0058":2038
}]
},
{
"var0057":31,
"var0001":"B",
"var0002":3,
"data":[{
"var0046":"tr100",
"var0055":110,
"var0054":14000,
"var0058":2038
},
{
"var0046":"tr300",
"var0055":3,
"var0054":30000,
"var0058":2038
}]
}]
Итак, моя средняя цель с использованием этого массива dicts - получить массив dicts, используя только ключ data
, где значения для ключей var0055
и var0054
агрегируются объектами с одинаковым значением для ключа. var0046
, пример:
data = [{
"var0046":"tr100",
"var0055":165,
"var0054":15000
},
{
"var0046":"tr200",
"var0055":12,
"var0054":8000
},
{
"var0046":"tr300",
"var0055":3,
"var0054":30000
}]
}]
И моя конечная цель - получить массив значений var0055
и var0054
, где каждая позиция массива представляет значение объекта для ключа, деленное на сумму всех объектов в одном и том же ключ, пример:
sum_var0054 = 15000+8000+30000
var0054 = [15000/sum_var0054,8000/sum_var0054,30000/sum_var0054]
мой код, который работает, но медленно:
def my_func(response):
data2 = []
for items in response['item']:
data2.extend(items['data'])
response2 = pd.DataFrame(data2)
response2 = response2.drop(columns = ['var0058'])
response2 = response2.groupby('var0046', as_index=False).sum()
sum_var0054 = sum(response2['var0054'])
ind0054 = sum((response2['var0054'] ** 2)/sum_var0054)
sum_var0055 = sum(response2['var0055'])
ind0055 = sum((response2['var0055'] ** 2)/sum_var0055)
response.clear()
response['ind0054'] = ind0054
response['ind0055'] = ind0055
Есть ли причина для агрегирования этого диктата, чтобы быстрее получить результат ind0054
и ind0055
? Без необходимости конвертировать в панды DataFrame? Работаете напрямую с форматом dict?