我有一个数据框,其中一些单元格包含多个值的列表。而不是存储多个
在单元格中,我希望扩展数据框,以便列表中的每个项都有自己的行(在所有其他列中都有相同的值)。因此,如果我有:
将熊猫作为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
#等等。
索引不重要,可以设置现有索引
列作为索引,而最终排序不是
重要的
比我预期的要长一点:
>&燃气轮机&燃气轮机;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)
更新:
>&燃气轮机&燃气轮机;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