UPD: Поправил чуть способ со счетчиком:
In [1]: list_in = [['Игрушки', 'Мяч надувной', '300', '1'], ['Игрушки', 'Бионикл', '8000', '1'], ['Ткань', 'Вельвет', '1000', '2'], ['Ткань', 'Джинса', '500', '2'], ['Игрушки', 'Бионикл', '1000', '2']]
In [2]: from collections import Counter
In [3]: c = Counter(); list(map(c.update, ({(cat, stor): int(price)} for cat, name, price, stor in list_in)))
Out[3]: [None, None, None, None, None]
In [4]: c
Out[4]: Counter({('Игрушки', '1'): 8300, ('Игрушки', '2'): 1000, ('Ткань', '2'): 1500})
In [5]: [[*k, v] for k, v in c.items()]
Out[5]: [['Игрушки', '1', 8300], ['Ткань', '2', 1500], ['Игрушки', '2', 1000]]
Но иногда нужно не просто считать, а что-то еще более сложное делать после группировки, тогда больше подойдёт вот такой вариант:
In [11]: from itertools import groupby
In [12]: [[*k, sum(int(rr[2]) for rr in v)] for k, v in groupby(list_in, lambda r: (r[0], r[-1]))]
Out[12]: [['Игрушки', '1', 8300], ['Ткань', '2', 1500], ['Игрушки', '2', 1000]]
Тут синтаксис третьего питона. Для второго придётся чуть поменять со звёздочкой.