У меня есть кадр данных, который выглядит следующим образом (Имя первого кадра данных (изображение ниже) в коде relevantdata
):
Я хочу, чтобы кадр данных был преобразован в следующий формат:
По сути, я хочу получить соответствующий подтвержденный номер для каждого ключа для всех даты, которые доступны в кадре данных. Если конкретная дата недоступна для ключа, мы устанавливаем это значение равным нулю.
В настоящее время мой код выглядит следующим образом (блок try / исключением используется, поскольку некоторые ключи не имеют всего диапазона дат, поэтому при первом обращении к этой дате с помощью * 1018 возникает ключевая ошибка для соответствующего ключа, следовательно, блок except
сделает нулевую запись в словарь на эту дату):
relevantdata = pandas.read_csv('https://raw.githubusercontent.com/open-covid-19/data/master/output/data_minimal.csv')
dates = relevantdata['Date'].unique().tolist()
covidcountries = relevantdata['Key'].unique().tolist()
data = dict()
data['Country'] = covidcountries
confirmeddata = relevantdata[['Date','Key','Confirmed']]
for country in covidcountries:
for date in dates:
countrydata = confirmeddata.loc[lambda confirmeddata: confirmeddata['Key'] == country].set_index('Date')
try:
if (date in data.keys()) == False:
data[date] = list()
data[date].append(countrydata.at[date,'Confirmed'])
else:
data[date].append(countrydata.at[date,'Confirmed'])
except:
if (date in data.keys()) == False:
data[date].append(0)
else:
data[date].append(0)
finaldf = pandas.DataFrame(data = data)
В то время как приведенный выше код выполнил то, что я хочу, получив блок данных в формате I требовать, это слишком медленно, приходится l oop через каждый ключ и дату. Я хочу знать, есть ли лучший и более быстрый способ сделать то же самое без необходимости использовать вложенное значение для l oop. Спасибо за твою помощь.