Я пытаюсь изменить мой кадр данных панд, но все же я не получил никаких результатов.У меня есть датафрейм этой формы:
fc.iloc[:,:2][:10]
Out[309]:
DATE TOTAL_REVENUE_TTM
TIC
AMZN.O 2018-01-01 3.769385e+11
AMZN.O 2018-01-01 3.775364e+11
AMZN.O 2018-01-01 3.772219e+11
AMZN.O 2018-01-01 3.766596e+11
AMZN.O 2018-01-01 3.757391e+11
AMZN.O 2018-02-01 3.931331e+11
AMZN.O 2018-02-01 3.935390e+11
AMZN.O 2018-02-01 3.932100e+11
AMZN.O 2018-02-01 3.926973e+11
AMZN.O 2018-02-01 3.917282e+11
Мне нужно правильно изменить столбец DATE, который не отражает реальную дату.Сложность в том, что мне нужно изменить его, следуя некоторому шаблону.Здесь я напечатал только 10 столбцов, но у меня есть много наблюдений, которые следуют одному и тому же правилу.
Подводя итог, это выходные данные размера 5 сети LSTM (я напечатал только два выхода) и напечатанныедата - только последняя дата вывода.Мне нужно восстановить все другие даты, зная, что все они сдвинуты во времени на 12 месяцев.На практике я должен сместить дату в 4-й строке на 1 год, дату в 3-й строке на 2 года и так далее.Это должно применяться к каждому выводу (скажем, к каждой 5 строке в фрейме данных) и к каждой компании в фрейме данных.
То, как работает код, также должно быть обобщено, если, например, я бы изменил размервыходных данных, чтобы у меня могло быть 3 повторяющихся даты вместо 5, а также если бы я изменил смещение назад во времени.
Я пытался написать функцию, которая принимает эти 2 параметра и возвращает весь фрейм данныхс корректно смещенными датами, но мне трудно найти способ правильно воспроизвести шаблон.
Здесь есть фрагмент кода для моей функции, который должен принимать каждый фрагмент данных, относящийся к компании,разработайте его и затем объедините снова, чтобы сформировать новый фрейм данных:
def modify_forecasts_dates(fc,offset,output_size):
#extract the company names
companies = fc.index.get_level_values(0).unique()
cmp_to_concat = []
for tick in companies:
cmp = fc.loc[tick]
cmp.insert(0, 'ROW_NUM', range(1,len(cmp)+1))
cmp['BOOL'] = np.where((np.mod(cmp['ROW_NUM'],output_size)==0), 'OK', 'MODIFY')
#cmp.drop(labels=['ROW_NUM','BOOL'],inplace=True)
cmp_to_concat.append(cmp)
final_df = pd.concat(cmp_to_concat)
return final_df
Сначала я попытался вставить номер строки счетчика, чтобы определить, какую строку не нужно менять, а именно каждую последнюю строкучасть продукции.Проблема все еще остается, потому что тогда я не знаю, как обновить все наблюдения перед последней выходной строкой.
Есть ли простой способ взять кадр данных с шагом 5 строк (или эквивалентно с шагомвыходной размер) и правильно сместить все предыдущие даты, получая t, t-смещение, t-2 * смещение и т. д.
Я знаю, что немного сложно понять, что мне нужно сделать, но яя действительно борюсьЯ мог бы сделать это вручную, но лучше автоматизировать процесс.