У меня большой (+ 10м строк) фрейм данных с тремя столбцами: даты продаж (dtype: datetime64[ns]
), имена клиентов и продажи на одного клиента. Даты продаж включают день, месяц и год в форме yyyy-mm-dd
(т.е. 2019-04-19). Я обнаружил функцию панд to_period
и хотел использовать period[A-MAR]
dtype. Поскольку рабочий год (заканчивающийся в марте) отличается от календарного года, это именно то, что я искал. С помощью функции to_period
я могу назначить соответствующие даты продаж для правильного финансового года, избегая при этом создания новых столбцов с дополнительной информацией.
Я конвертирую столбец даты следующим образом:
df_input['Date'] = pd.DatetimeIndex(df_input['Date']).to_period("A-MAR")
Теперь возникает особая проблема, когда я использую pivot_table
для агрегирования данных и установки margins=True
. aggfunc
возвращает правильные значения в выходной таблице. Однако результаты в последней строке (итоговое значение, созданное на полях) неверны, так как отображается NaN
(или в моем случае 0, как я установил fill_value = 0
). Функция, которую я использую:
df_output = df_input.pivot_table(index="Customer",
columns = "Date",
values = "Sales",
aggfunc ={"Sales": np.sum},
fill_value = 0,
margins= True)
Когда я не конвертирую даты в период, а использую вместо этого простой год (целое число), поля рассчитываются правильно, и в последней строке сводной выходной таблицы не отображается NaN.
Я искал по всему интернету, но не смог найти работающее решение. Я хотел бы продолжить работу с типом данных периода и просто нужно правильно рассчитать поля. Я надеюсь, что кто-то может помочь мне здесь. Спасибо!