Ho un frame di dati in cui alcune celle contengono elenchi di più valori. Invece di archiviare più valori in una cella, vorrei espandere il frame di dati in modo che ogni elemento nell'elenco ottenga la propria riga (con gli stessi valori in tutte le altre colonne). Quindi se ho:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{'trial_num': [1, 2, 3, 1, 2, 3],
'subject': [1, 1, 1, 2, 2, 2],
'samples': [list(np.random.randn(3).round(2)) for i in range(6)]
}
)
df
Out[10]:
samples subject trial_num
0 [0.57, -0.83, 1.44] 1 1
1 [-0.01, 1.13, 0.36] 1 2
2 [1.18, -1.46, -0.94] 1 3
3 [-0.08, -4.22, -2.05] 2 1
4 [0.72, 0.79, 0.53] 2 2
5 [0.4, -0.32, -0.13] 2 3
Come faccio a convertire in forma lunga, ad esempio:
subject trial_num sample sample_num
0 1 1 0.57 0
1 1 1 -0.83 1
2 1 1 1.44 2
3 1 2 -0.01 0
4 1 2 1.13 1
5 1 2 0.36 2
6 1 3 1.18 0
# etc.
L'indice non è importante, è OK impostare colonne esistenti come indice e l'ordinamento finale non è importante.
df.explode('samples')
per risolvere questo.explode
per ora può supportare solo l'esplosione di una colonna.