在列表列中,为每个列表元素创建一行

我有一个数据框,其中一些单元格包含多个值的列表。而不是存储多个
在单元格中,我希望扩展数据框,以便列表中的每个项都有自己的行(在所有其他列中都有相同的值)。因此,如果我有:

将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame(
{'trial_num':[1,2,3,1,2,3],
“主题”:[1,1,1,2,2,2],
‘样本’:[list(np.random.randn(3)、round(2))表示范围(6)内的i]
}
)
df
Output[10]:
受试样本数量
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

如何转换为长格式,例如:

受试者试验样本数量
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
#等等。

索引不重要,可以设置现有索引
列作为索引,而最终排序不是
重要的

比我预期的要长一点:

&gt&燃气轮机&燃气轮机;df
受试样本数量
0  [-0.07, -2.9, -2.44]        1          1
1   [-1.52, -0.35, 0.1]        1          2
2  [-0.17, 0.57, -0.65]        1          3
3  [-0.82, -1.06, 0.47]        2          1
4   [0.79, 1.35, -0.09]        2          2
5   [1.17, 1.14, -1.79]        2          3
&燃气轮机&燃气轮机&燃气轮机;
&燃气轮机&燃气轮机&燃气轮机;s=df.apply(λx:pd.Series(x['samples']),axis=1.stack().reset_index(level=1,drop=True)
&燃气轮机&燃气轮机&燃气轮机;s、 名称='sample'
&燃气轮机&燃气轮机&燃气轮机;
&燃气轮机&燃气轮机&燃气轮机;下降('samples',轴=1)。连接
受试者试验数量样本
0        1          1   -0.07
0        1          1   -2.90
0        1          1   -2.44
1        1          2   -1.52
1        1          2   -0.35
1        1          2    0.10
2        1          3   -0.17
2        1          3    0.57
2        1          3   -0.65
3        2          1   -0.82
3        2          1   -1.06
3        2          1    0.47
4        2          2    0.79
4        2          2    1.35
4        2          2   -0.09
5        2          3    1.17
5        2          3    1.14
5        2          3   -1.79

如果需要顺序索引,可以对结果应用reset\u index(drop=True)

更新

&gt&燃气轮机&燃气轮机;res=df.set_index(['subject','trial_num'])['samples'].apply(pd.Series).stack()
&燃气轮机&燃气轮机&燃气轮机;res=res.reset_index()
&燃气轮机&燃气轮机&燃气轮机;res.columns=['subject'、'trial_num'、'sample_num'、'sample']
&燃气轮机&燃气轮机&燃气轮机;物件
受试者试验样本数量
0         1          1           0    1.89
1         1          1           1   -2.92
2         1          1           2    0.34
3         1          2           0    0.85
4         1          2           1    0.24
5         1          2           2    0.72
6         1          3           0   -0.96
7         1          3           1   -2.72
8         1          3           2   -0.11
9         2          1           0   -1.33
10        2          1           1    3.13
11        2          1           2   -0.65
12        2          2           0    0.10
13        2          2           1    0.65
14        2          2           2    0.15
15        2          3           0    0.64
16        2          3           1   -0.10
17        2          3           2   -0.76

发表评论