Удалить списки из одного элемента для [np.mean]
и [np.sum]
до np.mean
и np.sum
для предотвращения MultiIndex
в столбцах:
gb = (sales.groupby(index_cols)
.agg({'item_cnt_day':np.sum, 'item_price':np.mean})
.reset_index()
.rename(columns={'sum': 'item_cnt_month','mean':'item_price'}))
Тогда возможно использование (но не на 100% уверен, если лучшая производительность):
gb['diff'] = gb.groupby(['shop_id','item_id'])['item_price'].diff()
EDIT:
Образец данных:
index_cols = ['shop_id', 'item_id', 'date_block_num']
sales = pd.DataFrame({
'item_id':list('aaaaaa'),
'shop_id':list('aaabbb'),
'date_block_num':[4,5,4,5,5,4],
'item_cnt_day':[7,8,9,4,2,3],
'item_price':[1,3,5,7,1,0]
})
gb = (sales.groupby(index_cols)
.agg({'item_cnt_day':[np.sum], 'item_price':[np.mean]})
.reset_index()
.rename(columns={'sum': 'item_cnt_month','mean':'item_price'}))
print (gb)
shop_id item_id date_block_num item_cnt_day item_price
item_cnt_month item_price
0 a a 4 16 3
1 a a 5 8 3
2 b a 4 3 0
3 b a 5 6 4
gb = (sales.groupby(index_cols)
.agg({'item_cnt_day':np.sum, 'item_price':np.mean})
.reset_index()
.rename(columns={'sum': 'item_cnt_month','mean':'item_price'}))
print (gb)
shop_id item_id date_block_num item_cnt_day item_price
0 a a 4 16 3
1 a a 5 8 3
2 b a 4 3 0
3 b a 5 6 4