df.columns = pd.MultiIndex.from_tuples(tuple(df.columns.str.split('_')))
df.stack(level=1).reset_index(level=1, drop=True).reset_index()
Pandas Melt several groups of columns into multiple target columns by name