如何批量提取DataFrame数组列中每个3D数组的指定元素?
提取DataFrame中3D数组列的指定位置元素
简洁解决方案
广播索引法(推荐)
直接对var3列的每个数组元素进行广播索引,这是Julia中最简洁高效的方式:
# 生成目标向量 getindex.(df.var3, 2, 1, 1)
或者用推导式写法:
[x[2, 1, 1] for x in df.var3]
两种写法都会输出[3, 3, 3],完全符合需求。
Map遍历法
通过map函数遍历列中的每个数组,提取指定位置的值:
map(x -> x[2, 1, 1], df.var3)
扩展:将结果添加到DataFrame中
如果需要把提取的结果作为新列保留在DataFrame里,可以用transform结合ByRow:
transform(df, :var3 => ByRow(x -> x[2, 1, 1]) => :extracted_value)
执行后会新增一列:extracted_value,每行对应var3列数组的(2,1,1)位置元素。
为什么你的尝试未生效?
你使用的df[:,3][1:3][2,1,1]是对数组的集合进行多维索引,而非对集合内的每个数组单独索引。df[:,3][1:3]得到的是包含3个3D数组的向量,后续的[2,1,1]会被Julia解析为对这个向量的多维索引(而非遍历每个数组),所以无法得到预期的向量结果。
内容的提问来源于stack exchange,提问作者flee
相关产品推荐
相关产品推荐

