Repeat rows in a pandas DataFrame based on column value Repeat rows in a pandas DataFrame based on column value python python

Repeat rows in a pandas DataFrame based on column value


reindex+ repeat

df.reindex(df.index.repeat(df.persons))Out[951]:    code  .     role ..1  persons0   123  .  Janitor   .        30   123  .  Janitor   .        30   123  .  Janitor   .        31   123  .  Analyst   .        21   123  .  Analyst   .        22   321  .   Vallet   .        22   321  .   Vallet   .        23   321  .  Auditor   .        53   321  .  Auditor   .        53   321  .  Auditor   .        53   321  .  Auditor   .        53   321  .  Auditor   .        5

PS: you can add.reset_index(drop=True) to get the new index


Wen's solution is really nice and intuitive. Here's an alternative, calling repeat on df.values.

df   code     role  persons0   123  Janitor        31   123  Analyst        22   321   Vallet        23   321  Auditor        5pd.DataFrame(df.values.repeat(df.persons, axis=0), columns=df.columns)   code     role persons0   123  Janitor       31   123  Janitor       32   123  Janitor       33   123  Analyst       24   123  Analyst       25   321   Vallet       26   321   Vallet       27   321  Auditor       58   321  Auditor       59   321  Auditor       510  321  Auditor       511  321  Auditor       5


Not enough reputation to comment, but building on @cs95's answer and @lmiguelvargasf's comment, one can preserve dtypes with:

pd.DataFrame(    df.values.repeat(df.persons, axis=0),    columns=df.columns,).astype(df.dtypes)