Используйте repeat
с loc
, если это не так RangeIndex
:
print (df.index.repeat(df['Col 2']))
Int64Index([0, 0, 0, 1, 1], dtype='int64')
df = df.loc[df.index.repeat(df['Col 2'])].reset_index(drop=True)
print (df)
Col 1 Col 2
0 Adam 3
1 Adam 3
2 Adam 3
3 Sarah 2
4 Sarah 2
А затем:
df.to_csv(file, index=False)
Общее решение для дублированного индекса или DatetimeIndex
- это повторяющийся массив с numy, созданный numpy.arange
и выбранный по позициям с помощью iloc
:
df = df.iloc[np.arange(len(df)).repeat(df['Col 2'])].reset_index(drop=True)
РЕДАКТИРОВАТЬ:
Решение без np.repeat
:
df =df.loc[[c for a, b in zip(df.index, df['Col 2']) for c in [a] * b]].reset_index(drop=True)
print (df)
Col 1 Col 2
0 Adam 3
1 Adam 3
2 Adam 3
3 Sarah 2
4 Sarah 2