Создайте комбинацию букв ("ab c") и переиндексируйте фрейм данных после stacking
from itertools import combinations_with_replacement
new_index = pd.MultiIndex.from_tuples(combinations_with_replacement("abc",2),
names=["columns","index"])
new_index
MultiIndex([('a', 'a'),
('a', 'b'),
('a', 'c'),
('b', 'b'),
('b', 'c'),
('c', 'c')],
names=['columns', 'index'])
#reindex
df.stack().reindex(new_index).reset_index(name='value')
columns index value
0 a a 0
1 a b 7
2 a c 9
3 b b 0
4 b c 3
5 c c 0