我有一个二维numpy数组,表示坐标网格上的深度。
z = np.array([[100, 101, 102, 103],
[101, 102, 103, 104],
[102, 103, 104, 105],
[103, 104, 105, 106],
[104, 105, 106, 107]])
我还有一个一维的numpy数组,列出了垂直坐标,另一个一维的numpy数组,列出了水平坐标。
x = np.array([10, 11, 12, 13])
y = np.array([20, 21, 22, 23, 24])
在某些情况下,此数据作为“ x y z”数据列表提供,例如:
10 20 100
10 21 101
10 22 102
10 23 103
10 24 104
11 20 101
11 21 102
...
12 23 105
12 24 106
13 20 103
13 21 104
13 22 105
13 23 106
13 24 107
在这种情况下,创建数据透视表很简单。...
data = pd.read_csv(file, header=None, names=['x', 'y', 'z'], delim_whitespace=True)
pvt = data.pivot_table(values='z', index='y', columns='x', fill_value=-100000)
如何从三个数组中的数据开始创建具有相同标签,格式等的数据透视表?
答案 0 :(得分:0)
我想我找到了一种使用numpy数组函数来获取正确格式数据的方法。这是一个正确的答案,但我希望有一种更优雅的方式来处理大熊猫。
由于我已经可以从read_csv()
返回的DataFrame中进行透视,所以最简单的选择是以与读取的DataFrame相同的格式获取数据...
zf = z.flatten()
xr = np.repeat(x, y.size)
yt = np.tile(y, x.size)
d = np.stack((xr, yt, zf), axis=-1)
data = pd.DataFrame(data=d, columns=['x', 'y', 'z'])
pvt = data.pivot_table(values='z', index='y', columns='x')
答案 1 :(得分:0)
怎么样
pd.DataFrame(z, index=y, columns=x)
?
在我看来,您本质上想要一个DataFrame并只使用一个数据透视表,因为它更容易。