Корректировка дат данных фреймов Pandas, о которых сообщается, для использования пользовательских интервалов - PullRequest
0 голосов
/ 23 октября 2019

У меня есть следующий фрейм данных:

date       01/2018      01/2019      02/2018  ... 10/2017 11/2017      12/2017     
              id_x id_y    id_x id_y    id_x  ...    id_y    id_x id_y    id_x id_y
department                                    ...                                  
0              NaN  NaN     NaN  NaN     NaN  ...     NaN     NaN  NaN     NaN  NaN
1            149.0  NaN   112.0  4.0   103.0  ...     NaN     NaN  NaN     NaN  NaN
799            NaN  NaN     NaN  NaN     NaN  ...     3.0    80.0  NaN    79.0  2.0

Исходные данные имели даты с метками времени. Даты были преобразованы и сгруппированы по месяцам и годам только в моих выходных данных (затем повернуты).

Теперь у меня проблема в том, что интервалы, которые мне нужно агрегировать или составлять отчеты, являются собственными (основанными на вводе пользователем - они будутне всегда будет ежемесячно). Интервалы могут быть следующими:
-Месячный
-Годовой (календарный год)
-По циклу (год (12-месячный период), начинающийся с определенной даты)
-Полвека / 6 месяцев
-Quarterly

МИНИМАЛЬНЫЙ интервал всегда будет месяцами (он никогда не будет днями или временем). Максимальный интервал будет 12 месяцев (но не всегда календарный год). Так что, похоже, я бы хотел вернуть месяцы, которые у меня есть в настоящее время, а затем «свернуть их» в более длинные периоды по мере необходимости.

У меня есть функция, которая выводит список «начальных» дат, необходимых для каждогоинтервал.

def DefineIntervals(start_date, end_date, Interval = 0):
    timeframes_mos = pd.date_range(start_date,end_date, freq='MS').strftime('%m/%Y').tolist()
    timeframes_qtr = pd.date_range(start_date,end_date, freq='QS').strftime('%m/%Y').tolist()
    timeframes_yrs = pd.date_range(start_date,end_date, freq='12MS').strftime('%m/%Y').tolist()
    return timeframes_mos, timeframes_qtr, timeframes_yrs

Меня беспокоит вопрос о том, следует ли создавать новый фрейм данных с этими данными, а затем пытаться выполнить какое-либо объединение или просто передать переменную для вывода этого фрейма данных с необходимыми интервалами - в любом случае я должен добраться дожелаемый конечный результат, который должен сообщать о пользовательских интервалах, некоторые из которых могут быть годом, который длится с марта этого года до конца февраля следующего года.

Похоже, что следующие могут работать для агрегирования кадранеобходимо:
Timegrouper
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Grouper.html
Период
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Period.html
Cut
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.cut.html
Resample
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.resample.html

Я застрял в том, как действовать, и не уверен, какая наиболее эффективная функция используется (если есть что-либо из перечисленного выше), учитывая необходимость.

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