Предисловие: Извините, если этот вопрос немного широк.Я не был уверен, как это сделать точнее.
Я обрабатываю данные финансового отчета, и я понял, что эти данные не все надежны.
Для моего случая использованияМне нужно, чтобы все записи отчета были ежеквартальными, а все кварталы должны быть представлены за определенный год.Это означает, что если по какой-либо причине кварталы отсутствуют или были указаны как полугодия (либо для частей года полного года), мне необходимо преобразовать эти отчеты в четыре квартальных отчета, насколько это возможно.
Я также понимаю, что мое мастерство в пандах не в силах справиться с этой, по моему мнению, запутанной переиндексацией.
Вот некоторые данные, которые вовсе не необычны, чтобы найти в наборе данныхУ меня есть в наличии:
>>> df = pd.DataFrame({'date': ['2021-12-31', '2021-12-31', '2021-04-31','2020-12-31', '2020-12-31', '2020-06-30', '2020-04-31',
'2019-01-15', '2019-01-15', '2019-01-15', '2019-09-30',
'2019-06-30', '2018-12-31', '2018-12-31'],
'fiscal_period': ['Y','Q4','Q1''Y','Q4','H1','Q1','H2','Y','Q4','Q3','Q2','Y','H2'],
'fiscal_year': ['2021','2021','2021','2020','2020','2020','2020','2019',
'2019','2019','2019','2019','2018','2018'] }
)
>>> df.set_index('date')
fiscal_period fiscal_year
date
2021-12-31 Y 2021
2021-12-31 Q4 2021
2021-04-31 Q1 2021
2020-12-31 Y 2020
2020-12-31 Q4 2020
2020-06-30 H1 2020
2020-04-31 Q1 2020
2019-01-15 H2 2019
2019-01-15 Y 2019
2019-01-15 Q4 2019
2019-09-30 Q3 2019
2019-06-30 Q2 2019
2018-12-31 Y 2018
2018-12-31 H2 2018
Для этих данных мне нужно превратить полугодия в кварталы и вставить «пропущенные» кварталы.«Пропущенный» в этом примере будет 2019-Q1, 2020-Q3, 2021-Q2 и 2021-Q3.
Для моего варианта использования не имеет значения, где «новые» кварталы вставляются в выделенные им места.период времени, поэтому 2019-Q1 может быть где угодно с 2019-01-01 и 2019-06-29.Единственное требование состоит в том, что порядок должен быть правильным, то есть 2019-Q1 должен быть раньше времени, чем 2019-Q2.
Попытки
Одна из моих первоначальных попыток состояла в переиндексировании ежеквартально, который яв конечном итоге понял, что не работает, так как компании не отчитываются в конце месяцев и даты могут сильно отличаться.Другая попытка состояла в повторной выборке на 3-месячной основе, которая также не работает, поскольку отчеты иногда задерживаются и не поступают с 3-месячными интервалами.
Моя текущая попытка - сгруппировать по fiscal_year
, проверьтедля существования каждого квартала, а затем вставьте их «вручную».Я уверен, что это займет слишком много времени, хотя, учитывая мои данные за 10 лет для более чем 30 000 компаний.
Мои требования к выходным данным
- Каждый год должен иметь Q1, Q2, Q3 и Q4 (и Y, но у них уже все это есть)
- Неважно, куда вставляются новые кварталы, если финансовый период находится в правильном порядке в течение каждого финансового года.
- Полугодия должны быть превращены в соответствующие им соответствующие кварталы.H1 -> Q2 и H2 -> Q4.
Ожидаемый результат
date fiscal_period fiscal_year
2021-12-31 Y 2021
2021-12-31 Q4 2021
2021-05-02 Q3 2021 <--- Q3 added at some date between 2021-06-30 and 2021-12-31 (between the added Q2 and Q4)
2021-05-01 Q2 2021 <--- Q2 added at some date between 2021-06-30 and 2021-12-31 (between Q1 and the added Q3)
2021-04-31 Q1 2021
2020-12-31 Y 2020
2020-12-31 Q4 2020
2020-07-01 Q3 2020 <--- Q3 added at some date between 2020-06-30 and 2020-12-31 (between Q2 and Q4)
2020-06-30 Q2 2020
2020-04-31 Q1 2020
2019-01-15 Y 2019
2019-01-15 Q4 2019
2019-09-30 Q3 2019
2019-06-30 Q2 2019
2019-01-01 Q1 2019 <--- Q1 added at some date between 2018-12-31 and 2019-06-30 (between Y last fiscal_year and Q2)
2018-12-31 Y 2018
2018-12-31 H2 2018
PS Не беспокойтесь о риске финансового прогнозирования, я об этом знаю.