Просто выполните следующие действия: расплавить, отбросить, отсортировать столбец name
, сбросить индекс и, наконец, удалить ненужные столбцы
In [1171]: df.melt(['name'],var_name='code').dropna().sort_values('name').reset_index().drop(['index', 'value'], 1)
Out[1171]:
name code
0 alex 2
1 alex 3
2 john 1
3 mike 1
4 rachel 0
5 rachel 4