Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将二维numpy数组转换为数据透视表_Python_Arrays_Pandas_Numpy_Pivot Table - Fatal编程技术网

Python 将二维numpy数组转换为数据透视表

Python 将二维numpy数组转换为数据透视表,python,arrays,pandas,numpy,pivot-table,Python,Arrays,Pandas,Numpy,Pivot Table,我有一个2D numpy数组,表示坐标网格上的深度 z = np.array([[100, 101, 102, 103], [101, 102, 103, 104], [102, 103, 104, 105], [103, 104, 105, 106], [104, 105, 106, 107]]) x = np.array([10, 11, 12, 13]) y = np.arra

我有一个2D numpy数组,表示坐标网格上的深度

z = np.array([[100, 101, 102, 103],
              [101, 102, 103, 104],
              [102, 103, 104, 105],
              [103, 104, 105, 106],
              [104, 105, 106, 107]])
x = np.array([10, 11, 12, 13])
y = np.array([20, 21, 22, 23, 24])
我还有一个列出垂直坐标的1D numpy数组和另一个列出水平坐标的1D numpy数组

z = np.array([[100, 101, 102, 103],
              [101, 102, 103, 104],
              [102, 103, 104, 105],
              [103, 104, 105, 106],
              [104, 105, 106, 107]])
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)

如何从三个数组中的数据开始创建具有相同标签、格式等的透视表?

我想我已经找到了一种使用numpy数组函数以正确格式获取数据的方法。这是一个正确的答案,但我希望有一个更优雅的方式来处理熊猫

由于我已经可以从
read\u csv()
返回的数据帧透视,因此最简单的选择是以与读取数据帧相同的格式获取数据

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')
怎么样

pd.DataFrame(z, index=y, columns=x)
?

在我看来,您基本上需要一个数据帧,只需要使用一个pivot_表,因为这样更容易