Ich habe einen Datenrahmen, in dem einige Zellen Listen mit mehreren Werten enthalten. Anstatt mehrere Werte in einer Zelle zu speichern, möchte ich den Datenrahmen so erweitern, dass jedes Element in der Liste eine eigene Zeile erhält (mit denselben Werten in allen anderen Spalten). Also wenn ich habe:
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
Wie konvertiere ich in Langform, zB:
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.
Der Index ist nicht wichtig, es ist in Ordnung, vorhandene Spalten als Index festzulegen, und die endgültige Reihenfolge ist nicht wichtig.
df.explode('samples')
lösen.explode
kann vorerst nur das Explodieren einer Spalte unterstützen.