重塑pandas DataFrame从Meshgrid

6

如果我按以下方式构建一个pandas DataFrame:

import numpy as np
import pandas as pd

x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)
z = np.sin(xx**2+yy**2)
df = pd.DataFrame(z, index=x, columns=y)

我现在有一个41x41的数据框,其中每个值都对应着一个x,y坐标对。 我希望重新塑造这个数据框,使得我有3列(X,Y,Z)和1681行,并且有一个新的任意索引范围0-1680。

顺便说一句,如果我的数据框已经处于所需的形式,我相信这将与取消df.pivot('X','Y','Z')相同,但我不确定如何实现这一点。


2
执行 df.unstack() 看看是否能得到你想要的结果。 - Bob Haffner
3个回答

4
为什么不全部使用numpy呢?
>>> data = np.array([xx, yy, z]).reshape(3, -1).T
>>> data
array([[-5.01      , -5.01      , -0.0652361 ],
       [-4.76      , -5.01      , -0.59221922],
       [-4.51      , -5.01      ,  0.9936343 ], ...

2
这是对不同问题的正确答案。要么问题改变了,要么答案不应该被接受(回答很好,但没有涉及数据框架点)。 - sapo_cosmico

1

unstack 将撤销 pivot 有关 pandas.unstack() 的帮助

df.unstack().reset_index().rename(columns={'level_0':'x','level_1':'y',0:'z'})
    x     y         z
0 -5.01 -5.01 -0.065236
1 -5.01 -4.76 -0.592219
2 -5.01 -4.51  0.993634
这段内容涉及程序设计,不需要进行翻译,直接保留原文。

1
你可以将多维数组重塑为一维数组,并创建一个字典,然后很容易地将其转换为有序的数据框:
import numpy as np
import pandas as pd

x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)
z = np.sin(xx**2+yy**2)
NT = np.product(xx.shape)

data = {
    "x": np.reshape(xx,NT),
    "y": np.reshape(yy,NT),
    "z": np.reshape(zz,NT)
}
df = pd.DataFrame(data=data)

df


将输出:
    x   y   z
0   -5.01   -5.01   -0.065236
1   -4.76   -5.01   -0.592219
2   -4.51   -5.01   0.993634
3   -4.26   -5.01   -0.670288
4   -4.01   -5.01   -0.333011
... ... ... ...
1676    3.99    4.99    0.020503
1677    4.24    4.99    -0.893283
1678    4.49    4.99    0.880967
1679    4.74    4.99    -0.241402
1680    4.99    4.99    -0.448675
1681 rows × 3 columns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接