将2D Numpy数组转换为Pandas数据透视表

时间:2018-08-13 11:08:09

标签: python arrays pandas numpy pivot-table

我有一个二维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)

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

2 个答案:

答案 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并只使用一个数据透视表,因为它更容易。