IIUC:
Ваши индексы являются метками для ваших узлов.Итак, нам нужно немного изменить форму информационного кадра, чтобы создать информационный кадр списка ребер:
d1 = df.reset_index().set_index(['X',df.groupby('X').cumcount()]).unstack()['index']
d2 = df.reset_index().set_index(['Y',df.groupby('Y').cumcount()]).unstack()['index']
d3 = pd.concat([d1,d2]).set_axis(['source','target'], inplace=False, axis=1).dropna().astype(int)
G = nx.from_pandas_edgelist(d3, source='source', target='target')
nx.draw_networkx(G)
Вывод: