indices = [133, 22, 19, 203, 14, 1] df_by_indices = df.iloc[indices, :]
df = df.loc[df.index.repeat(df['a'])] df['c'] = df.groupby(level=0).cumcount() + 1 df = df.reset_index(drop=True) print (df) a b c 0 1 x 1 1 2 y 1 2 2 y 2 3 3 z 1 4 3 z 2 5 3 z 3