Мне нравится сначала фильтровать фрейм данных, чтобы уменьшить количество ненужных вычислений:
df.query('month == 1 and year == 2013')\
.assign(all_revenue = df.item_price * df.item_cnt_day)\
.groupby(['shop_id','month','year'], as_index=False)['all_revenue'].sum()
Выход:
shop_id month year all_revenue
0 25 1 2013 27.0
1 59 1 2013 25.0
Примечание: Поскольку ваши имена столбцов «дружественные», без пробелов и специальных символов, вы можете использовать метод query
. Если это не работает для именования столбцов, вам нужно использовать логическое индексирование.
df[(df['month'] == 1) & (df['year'] == 2013)]\
.assign(all_revenue = df.item_price * df.item_cnt_day)\
.groupby(['shop_id','month','year'], as_index=False)['all_revenue'].sum()