処理が逐次的なのでいまいちですが、こんな感じでできます。
Python
1import pandas as pd
2import io
3
4txt = """
5,interface,MAC,vlan
60,Gi0/1,aa:aa:aa:aa:aa:aa,100.200
73,Gi0/7,bb:bb:bb:bb:bb:bb,100
84,Gi0/5,cc:cc:cc:cc:cc:cc,200
95,Gi0/3,dd:dd:dd:dd:dd:dd,100
10"""
11
12# CSVファイルから読み込むときは、io.StringIO(txt)をファイル名の文字列に変更
13# vlan列は文字列として読み込み、interface列をインデックスにして読み込み、他の列は読み込まない
14df = pd.read_csv(io.StringIO(txt), dtype={'vlan': str}, index_col=['interface'], usecols=['interface', 'vlan'])
15# print(df)
16
17# vlan列は区切り文字で分割してリストにする
18df['vlan'] = df['vlan'].str.split('.')
19# print(df)
20
21# vlan列のリストからvlanIDの集合(重複なし)を作成
22vlan_set = set(df['vlan'].sum())
23# print(vlan_set)
24
25# 行列用のデータフレームを用意
26dfm = pd.DataFrame(index=df.index, columns=df.index).fillna(0)
27# print(dfm)
28
29# 各要素の値を逐次的に設定
30for id1 in df.index:
31 for id2 in df.index:
32 for vlan in vlan_set:
33 if id1 != id2 and vlan in df.at[id1, 'vlan'] and vlan in df.at[id2, 'vlan']:
34 dfm.at[id1, id2] = vlan
35
36print(dfm)