Я пытаюсь создать сводку данных по категориям за последние 12 месяцев (исключая текущий месяц).Я суммировал предыдущие 3 месяца с помощью следующего кода, но делать это в течение 12 месяцев кажется громоздким.Мне интересно, есть ли более эффективный способ динамического разделения данных за последние 12 месяцев.df1 - это полный набор данных, который я загружаю из соединения с БД с помощью SQL-запроса.Я использую .drop (), чтобы вырезать ненужные столбцы данных и оставляю меня только с счетом.
import pandas as pd
import datetime
df1.Start_Date = pd.DatetimeIndex(df1.Start_Date)
today = datetime.date.today()
currentfirst = today.replace(day=1)
thirdMonth = currentfirst - pd.offsets.MonthBegin(3)
secondMonth = currentfirst - pd.offsets.MonthBegin(2)
firstMonth = currentfirst - pd.offsets.MonthBegin(1)
fst_label = firstMonth.strftime('%B')
snd_label = secondMonth.strftime('%B')
thd_label = thirdMonth.strftime('%B')
def monthly_vol(df, label, start_date, end_date):
"""Slices df1 into previous months and sums the volume of each change class."""
if start_date is not None:
df = df1[df1.Start_Date >= start_date]
if end_date is not None:
df = df[df.Start_Date < end_date]
df_count = df.groupby('Change Class').count().drop(['Start_Date', 'Risk Level', 'Change Coordinator', 'Change Coordinator Group'], axis=1)
return df_count
fst_month = monthly_vol(df1, fst_label, firstMonth, currentfirst)
snd_month = monthly_vol(df1, snd_label, secondMonth, firstMonth)
thd_month = monthly_vol(df1, thd_label, thirdMonth, secondMonth)
def month_merge(df1, df2, df3):
"""Merges monthly dataframes together."""
new_df = pd.merge(df1, df2, left_index=True, right_index=True).merge(df3, left_index=True, right_index=True)
new_df.columns = [fst_label, snd_label, thd_label]
print(new_df)
return new_df
monthly_vol = month_merge(fst_month, snd_month, thd_month)
Это даст вывод:
May April March
Change Class
Emergency 36 36 32
Expedited 17 24 35
Normal 182 146 134
Standard 256 210 267
Бонусный вопрос: Этобыло бы неплохо получить среднее значение общего объема для каждой категории в одном и том же кадре данных.Примерно так:
May MayAVG April AprilAVG March MarchAVG
Change Class
Emergency 36 7.33 36 8.65 32 6.84
Expedited 17 3.46 24 5.77 35 7.48
Normal 182 37.07 146 35.10 134 28.63
Standard 256 52.14 10 50.48 267 57.05
Любая помощь будет высоко ценится!