У меня следующая проблема.
mtx =[['0','q'],
['0','e'],
['1','q'],
['1','w'],
['2','r'],
['2','e'],
['2','w'],
['3','t'],
['4','y']]
df10 = pd.DataFrame(np.insert(mtx, 2, np.random.rand(len(mtx))*10, axis=1),
columns=['id','cat','val'])
Я хочу
- сгруппировать его по id и cat ,
- имеет все возможные кошка , присутствующие в результате для каждого id ,
- применения функции (скажем, sum )на val ,
- для отсутствующих (id, cat) комбинации заполняются 0с.
т.е. результат будет иметь следующую форму.
mtx1 = [[el1, el] for el in 'qwerty' for el1 in '01234']
df11 = pd.DataFrame(np.insert(mtx1, 2, '-', axis=1),
columns=['id','cat','val'])
>>>
[['0' 'q' '-']
['1' 'q' '-']
['2' 'q' '-']
['3' 'q' '-']
['4' 'q' '-']
['0' 'w' '-']
['1' 'w' '-']
['2' 'w' '-']
['3' 'w' '-']
['4' 'w' '-']
['0' 'e' '-']
['1' 'e' '-']
['2' 'e' '-']
['3' 'e' '-']
['4' 'e' '-']
['0' 'r' '-']
['1' 'r' '-']
['2' 'r' '-']
['3' 'r' '-']
['4' 'r' '-']
['0' 't' '-']
['1' 't' '-']
['2' 't' '-']
['3' 't' '-']
['4' 't' '-']
['0' 'y' '-']
['1' 'y' '-']
['2' 'y' '-']
['3' 'y' '-']
['4' 'y' '-']]
Для -
должен быть результат применения func
ИЛИ 0.Можно ли идиоматически выполнить такую операцию в пандах?с .groupby
?Я могу думать только о том, чтобы вручную создать перекрестное произведение, а затем проверить оригинал df10
, если комбинация существует, и затем применить func
или вставить 0
при наличии комбинации в оригинале df
.