Используйте, pd.to_datetime
, чтобы преобразовать столбец date
в ряд pandas datetime, затем используйте DataFrame.groupby
, чтобы сгруппировать фрейм данных на month
, country
и device
, теперь объедините count_orders
в сгруппированном фрейме данных, используя sum
. Теперь используйте Series.floordiv
, чтобы разделить столбец average_monthly_orders
в новом фрейме данных на соответствующие дни месяца, которые можно получить, используя Series.dt.daysinmonth
:
df['date'] = pd.to_datetime(df['date'])
df1 = (
df.groupby([df['date'].dt.strftime('%B-%y'), 'country', 'device'], sort=False)
.agg(average_monthly_orders=('count_orders', 'sum'))
.reset_index()
)
df1['average_monthly_orders'] = (
df1['average_monthly_orders'].floordiv(pd.to_datetime(
df1['date'], format='%B-%y').dt.daysinmonth)
)
# print(df1)
date country device average_monthly_orders
0 January-19 UK phone 32
1 January-19 UK tablet 19
2 January-19 JP phone 35
3 January-19 JP tablet 12