Вот идея с np.where
occurrences = pd.DataFrame([[0,0,1,1],[0,1,0,1], [1,0,1,0]])
dictionary=pd.DataFrame({'term':['foo','bar', 'lorem', 'ipsum']})
idx = np.where(occurrences)
(pd.Series(dictionary.values[idx[1]].ravel())
.groupby(idx[0]).agg(list)
)
Вывод:
0 [lorem, ipsum]
1 [bar, ipsum]
2 [foo, lorem]
dtype: object