如何在Pandas / Python中将x作为行,y作为cols转换(x,y,k)为k-矩阵?

时间:2018-11-07 10:24:38

标签: python python-3.x pandas

按照标题,我有一个Pandas数据框,其中包含坐标和一个值(z),如:

import pandas as pd
df = pd.DataFrame(
     columns=['x', 'y', 'k'],
     data=((x, y, x * y) for x in range(3) for y in range(3)))

导致:

   x  y  k
0  0  0  0
1  0  1  0
2  0  2  0
3  1  0  0
4  1  1  1
5  1  2  2
6  2  0  0
7  2  1  2
8  2  2  4

我想获得:

   0  1  2
0  0  0  0
1  0  1  2
2  0  2  4

(其中x的值现在是行,y的值现在是列)。

用Pandas做这件事的最Pythonic方式是什么?

这类似于从稀疏矩阵中获得矩阵的密集表示。 注意:xy的值可以是任何值(不一定是恰好映射良好索引的整数)。

p.s。我知道我可以做两个手动循环,但这就是我要避免的事情。

1 个答案:

答案 0 :(得分:1)

您可以使用pivot

df.pivot(index='x', columns='y', values='k')
y  0  1  2
x         
0  0  0  0
1  0  1  2
2  0  2  4

要匹配所需的输出,可以使用:

pd.DataFrame(df.pivot(index='x', columns='y', values='k').values)
   0  1  2
0  0  0  0
1  0  1  2
2  0  2  4