Панды вставляют недостающие четверти в радиус - PullRequest
0 голосов
/ 19 сентября 2019

Предисловие: Извините, если этот вопрос немного широк.Я не был уверен, как это сделать точнее.

Я обрабатываю данные финансового отчета, и я понял, что эти данные не все надежны.

Для моего случая использованияМне нужно, чтобы все записи отчета были ежеквартальными, а все кварталы должны быть представлены за определенный год.Это означает, что если по какой-либо причине кварталы отсутствуют или были указаны как полугодия (либо для частей года полного года), мне необходимо преобразовать эти отчеты в четыре квартальных отчета, насколько это возможно.

Я также понимаю, что мое мастерство в пандах не в силах справиться с этой, по моему мнению, запутанной переиндексацией.

Вот некоторые данные, которые вовсе не необычны, чтобы найти в наборе данныхУ меня есть в наличии:

>>> 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 Не беспокойтесь о риске финансового прогнозирования, я об этом знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...