按照标题,我有一个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方式是什么?
这类似于从稀疏矩阵中获得矩阵的密集表示。
注意:x
和y
的值可以是任何值(不一定是恰好映射良好索引的整数)。
p.s。我知道我可以做两个手动循环,但这就是我要避免的事情。
答案 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