nm = df.Name.str.split(',\\s*', expand=True)
cols = list(set(df.columns) - set(['Name']))
pd.melt(df[cols].join(nm), id_vars=cols, value_vars=nm.columns.tolist(),
    value_name='Name').dropna().drop(['variable'], axis=1).sort_values('ID')
DataFrame transformation in Python Pandas