У меня есть словарь, заполненный несколькими фреймами данных. Сейчас я ищу эффективный способ изменения ключевой структуры, но решение, которое я нашел, довольно медленное, когда задействовано больше фреймов данных / больших фреймов данных. Вот почему я хотел спросить, может ли кто-нибудь знать более удобный / эффективный / быстрый способ или подход, чем мой. Итак, сначала я создал этот пример, чтобы показать, с чего я изначально начал:
import pandas as pd
import numpy as np
# assign keys to dic
teams = ["Arsenal", "Chelsea", "Manchester United"]
dic_teams = {}
# fill dic with random entries
for t1 in teams:
dic_teams[t1] = pd.DataFrame({'date': pd.date_range("20180101", periods=30),
'Goals': pd.Series(np.random.randint(0,5, size = 30)),
'Chances': pd.Series(np.random.randint(0,15, size = 30)),
'Fouls': pd.Series(np.random.randint(0, 20, size = 30)),
'Offside': pd.Series(np.random.randint(0, 10, size = 30))})
dic_teams[t1] = dic_teams[t1].set_index('date')
dic_teams[t1].index.name = None
Теперь у меня в основном есть словарь, где каждый ключ - это команда, что означает, что у меня есть фрейм данных для каждой команды с информацией об их игре. производительность с течением времени. Теперь я бы предпочел изменить этот конкретный словарь, чтобы получить структуру, в которой ключом является дата, а не команда. Это означало бы, что у меня есть фрейм данных для каждой даты, который заполнен результатами работы каждой команды на эту дату. Мне удалось это сделать, используя следующий код, который работает, но становится очень медленным, когда я добавляю больше команд и факторов производительности:
# prepare lists for looping
dates = dic_teams["Arsenal"].index.to_list()
perf = dic_teams["Arsenal"].columns.to_list()
dic_dates = {}
# new structure where key = date
for d in dates:
dic_dates[d] = pd.DataFrame(index = teams, columns = perf)
for t2 in teams:
dic_dates[d].loc[t2] = dic_teams[t2].loc[d]
Поскольку я использую вложенный l oop, реструктуризация моего словаря медленный. Есть ли у кого-нибудь идеи, как я могу улучшить вторую часть кода? Я не обязательно ищу только решение, а также лог c или идею, как сделать лучше.
Заранее спасибо, любая помощь приветствуется