Вы можете выбрать df, нарезав столбец, используя iloc и шаг arg:
>>> pd.DataFrame({'student_id':df['student_id'].iloc[::2].values, 'student_id_1':df['student_id'].iloc[1::2].values})
student_id student_id_1
0 abc100 abc101
1 abc102 abc103
2 abc104 abc105
3 abc106 abc107
ИЛИ, наоборот, как @coldspeed предложил только для широкой видимости :-)
df.assign(index=df.groupby('rep').cumcount()).pivot('index', 'rep', 'student_id')