J'ai un dataframe où certaines cellules contiennent des listes de plusieurs valeurs. Plutôt que de stocker plusieurs valeurs dans une cellule, j'aimerais étendre le dataframe afin que chaque élément de la liste ait sa propre ligne (avec les mêmes valeurs dans toutes les autres colonnes). Donc si j'ai:
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
Comment puis-je convertir en forme longue, par exemple:
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'index n'est pas important, vous pouvez définir les colonnes existantes comme index et le classement final n'est pas important.
df.explode('samples')
pour résoudre ce problème.explode
ne peut supporter que l'explosion d'une colonne pour le moment.