В pandas 0.23 есть структура данных SparseSeries , которую можно использовать для получения разреженной матрицы:
s = df.groupby(['id', 'value'])['count'].sum()
ss = s.to_sparse() # convert to sparse series
coo, rows, columns = ss.to_coo(row_levels=['id'], column_levels=['value'], sort_labels=True) # convert to coo
result = coo.tocsr() # convert to csr
print(result)
выход
(0, 1) 3
(0, 2) 1
(1, 0) 1
(1, 1) 1
(2, 2) 2
(3, 3) 1
Сначала вы преобразуете его в редкий ряд, затем в coo (см. to_coo ) и, наконец, при необходимости, в csr. Переменные строки и столбцы содержат метки строк и столбцов из мультииндекса. Для приведенного выше примера метки столбцов:
['groupA', 'groupB', 'groupC', 'groupZ']
и метки строк:
[1, 2, 3, 4]