Вот довольно наивный способ использования apply
:
Настройка:
df = pd.DataFrame({'SNFrom':[1,5],'SNTo':[4,7],'Name':['John','Jack'],'Age':[8,6]})
>>> df
Age Name SNFrom SNTo
0 8 John 1 4
1 6 Jack 5 7
Решение:
new_df = (df.set_index(['Name','Age'])[['SNFrom','SNTo']]
.apply(lambda x: pd.Series(list(range(x.SNFrom, x.SNTo+1))),1)
.stack()
.reset_index(level=[0,1])
.rename(columns={0:'SN'}))
>>> new_df
Name Age SN
0 John 8 1.0
1 John 8 2.0
2 John 8 3.0
3 John 8 4.0
0 Jack 6 5.0
1 Jack 6 6.0
2 Jack 6 7.0