Я просмотрел множество решений по этой теме c, но я не смог адаптировать свой кейс к высокопроизводительному. Предположим, у меня есть список словарей, хранящийся в виде:
db_data = [
{
"start_time": "2020-04-20T17:55:54.000-00:00",
"results": {
"key_1": ["a","b","c","d"],
"key_2": ["a","b","c","d"],
"key_3": ["a","b","c","d"]
}
},
{
"start_time": "2020-04-20T18:32:27.000-00:00",
"results": {
"key_1": ["a","b","c","d"],
"key_2": ["a","b","e","f"],
"key_3": ["a","e","f","g"]
}
},
{
"start_time": "2020-04-21T17:55:54.000-00:00",
"results": {
"key_1": ["a","b","c"],
"key_2": ["a"],
"key_3": ["a","b","c","d"]
}
},
{
"start_time": "2020-04-21T18:32:27.000-00:00",
"results": {
"key_1": ["a","b","c"],
"key_2": ["b"],
"key_3": ["a"]
}
}
]
Я пытаюсь получить агрегацию данных из вывода списка в виде словаря со значениями ключа объекта результатов в качестве ключей вывода, и размер набора уникальных значений для каждой даты для каждого ключа.
Я пытаюсь объединить данные по значению даты и вывести количество уникальных значений для каждого ключа для каждого дня.
Ожидаемый результат примерно такой:
{
"key_1": {
"2020-04-20": 4,
"2020-04-21": 3
},
"key_2": {
"2020-04-20": 6,
"2020-04-21": 2
},
"key_3": {
"2020-04-20": 7,
"2020-04-21": 4
}
}
До сих пор я пытался использовать defaultdict
и циклы для агрегирования данных. К сожалению, это занимает очень много времени:
from datetime import datetime
grouped_data = defaultdict(dict)
for item in db_data:
group = item['start_time'].strftime('%-b %-d, %Y')
for k, v in item['results'].items():
if group not in grouped_data[k].keys():
grouped_data[k][group] = []
grouped_data[k][group] = list(set(v + grouped_data[k][group]))
for k, v in grouped_data.items():
grouped_data[k] = {x:len(y) for x, y in v.items()}
print(grouped_data)
Любая помощь или руководство приветствуются. Я читал, что pandas
может помочь здесь, но я не совсем уверен, как адаптировать этот вариант использования.
Редактировать Я не уверен, почему это было закрыто так быстро. Я просто ищу несколько советов о том, как повысить производительность. Буду признателен за повторное открытие.