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