【发布时间】:2019-04-26 13:25:17
【问题描述】:
我有来自全因子实验的数据。例如,对于每个N 样本,我有J 测量类型和K 测量位点。我以长格式接收此数据,例如,
import numpy as np
import pandas as pd
import itertools
from numpy.random import normal as rnorm
# [[N], [J], [K]]
levels = [[1,2,3,4], ['start', 'stop'], ['gene1', 'gene2', 'gene3']]
# fully crossed
exp_design = list(itertools.product(*levels))
df = pd.DataFrame(exp_design, columns=["sample", "mode", "gene"])
# some fake data
df['x'] = rnorm(size=len(exp_design))
这会产生 24 个观察值 (x),其中三个因子中的每一个都有一个列。
> df.head()
sample mode gene x
0 1 start gene1 -1.229370
1 1 start gene2 1.129773
2 1 start gene3 -1.155202
3 1 stop gene1 -0.757551
4 1 stop gene2 -0.166129
我想将这些观察结果转换为相应的(N,J,K) 形张量(numpy 数组)。我正在考虑使用 MultiIndex 转向宽格式,然后提取值会生成正确的张量,但它只是作为列向量出现:
> df.pivot_table(values='x', index=['sample', 'mode', 'gene']).values
array([[-1.22936989],
[ 1.12977346],
[-1.15520216],
...,
[-0.1031641 ],
[ 1.1296491 ],
[ 1.31113584]])
有没有一种快速的方法可以从长格式 pandas.DataFrame 中获取张量格式的数据?
【问题讨论】:
标签: python pandas numpy tensor numpy-ndarray