Estoy tratando de repetir las filas de un dataframe. Aquí están mis datos originales:
pd.DataFrame([ {'col1': 1, 'col2': 11, 'col3': [1, 2] }, {'col1': 2, 'col2': 22, 'col3': [1, 2, 3] }, {'col1': 3, 'col2': 33, 'col3': [1] }, {'col1': 4, 'col2': 44, 'col3': [1, 2, 3, 4] }, ])
lo que me da
col1 col2 col3 0 1 11 [1, 2] 1 2 22 [1, 2, 3] 2 3 33 [1] 3 4 44 [1, 2, 3, 4]
Me gustaría repetir las filas dependiendo de la longitud de la matriz en col3, es decir, me gustaría obtener un dataframe como este.
col1 col2 0 1 11 1 1 11 2 2 22 3 2 22 4 2 22 5 3 33 6 4 44 7 4 44 8 4 44 9 4 44
¿Qué es una buena manera de lograr esto?
También puedes usar index.repeat
y index.repeat
df = df.reindex(df.index.repeat(df.col3.apply(len))) df = df.reset_index(drop=True).drop("col3", axis=1) # To reset index and drop col3 # Output: col1 col2 0 1 11 1 1 11 2 2 22 3 2 22 4 2 22 5 3 33 6 4 44 7 4 44 8 4 44 9 4 44
Puede utilizar una lista de comprensión junto con zip
.
>>> pd.DataFrame([row for row, count in zip(df[['col1', 'col2']].values, df['col3']) for _ in range(len(count))], columns=df.columns[:2]) col1 col2 0 1 11 1 1 11 2 2 22 3 2 22 4 2 22 5 3 33 6 4 44 7 4 44 8 4 44 9 4 44