Python 从Meshgrid重塑数据帧
如果我按照如下方式构造一个数据帧:Python 从Meshgrid重塑数据帧,python,numpy,pandas,Python,Numpy,Pandas,如果我按照如下方式构造一个数据帧: 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对。我想重塑
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')是一样的,但我不确定如何实现这一点。为什么不在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 ], ...
unstack
将撤消pivot
df.unstack().reset_index().rename(列={'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
您可以将多维阵列重塑为一维阵列并创建dict,然后将其轻松转换为有序的数据帧:
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
做一个df.unstack()测试,看看这是否能满足你的需要。这是另一个问题的正确答案。问题更改或答案不应被接受(答案很好,但不涉及数据帧点)
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