Ваш вопрос немного сбивает с толку, но я думаю, это то, что вы имеете в виду:
from itertools import combinations
confustion_matrix = pd.DataFrame(index=df.columns, columns=df.columns)
for col1, col2 in [*combinations(df.columns, 2)]:
confustion_matrix.loc[col1, col2] = len(set(df[col1]).intersection(set(df[col2]))
confustion_matrix.loc[col2, col1] = len(set(df[col1]).intersection(set(df[col2]))