Python 如何使用嵌套for循环迭代附加表示空间x和y场景的数据帧?

Python 如何使用嵌套for循环迭代附加表示空间x和y场景的数据帧?,python,pandas,Python,Pandas,我试图创建一个数据框来表示地形表达式。到目前为止,我已经编写了一对for循环,它们可以单独用于表示x轴和y轴,具体形式如下: a = [] for x in range(1,i,1): x1 = some function of x x2 = another function of x a.append({'a':x, 'b':x1, 'c': x2}) xaxis = pd.DataFrame(a) 对于x轴和 a = [] for y in range(-j

我试图创建一个数据框来表示地形表达式。到目前为止,我已经编写了一对for循环,它们可以单独用于表示x轴和y轴,具体形式如下:

a = []   
for x in range(1,i,1):
    x1 = some function of x
    x2 = another function of x 
    a.append({'a':x, 'b':x1, 'c': x2})
xaxis = pd.DataFrame(a)
对于x轴和

a = []
for y in range(-j, j, 1):
    y1 = some function of y   
    a.append({'a':y,'b':y1})
yaxis = pd.DataFrame(a)
对于y轴

这一切都很简单,效果很好,但是

我想对此进行扩展,以便y轴循环在x轴循环的每次迭代中重复,并且y1函数取决于x轴循环的参数。我走了这么远

a = []   
for x in range(1,i,1):
    x1 = some function of x
    x2 = another function of x 
    for y in range(-j, j, 1):
        y1 = some function of y that calls x2
    a.append({
我被难住了

我想要的输出基本上是这样的

x    x1      x2     y    y1       
     x1(1)   x2(1)  -j   y1(1,-j)  
1    x1(1)   x2(1)  0    y1(1,0)   
     x1(1)   x2(1)  j    y1(1,j)      
     x1(2)   x2(2)  -j   y1(2,-j)  
2    x1(2)   x2(2)  0    y1(2,0)   
     x1(2)   x2(2)  j    y1(2,j)  
....
依此类推到x=i

最终的愿望是拥有可以绘制在二维直方图中的数据

如果有更好的方法,请一定要让我知道,这是我目前唯一能想到的可能得到我想要的结果的方法

编辑:事实证明,使用numpy数组可以非常有效地完成这项工作。这是我最终是如何实现这个目标的一个概括的表述,

y1 = lambda x,y: f(x,y)
np.array( [ [ y1(x,y) for x in xrange(1,i,1)] for y in xrange(-j,j,1)] )

您必须找到函数的矢量化版本。这可以通过使用
numpy
的几个矢量化函数或使用
numpy.vectoriad()
来实现(对于intstant)。看看这个例子:

import numpy as np

def f1(x):
    return x**2

def f2(x):
    return np.abs(x)

def f3(x,y):
    return x**2 + y**2

i = 3 ; j = 2
x = np.arange(1,i,1)
y = np.arange(-j,j,1)

# Now build cartesian product of x and y
xy = np.array([np.tile(x, len(y)), np.repeat(y, len(x))])
xy
array([[ 1,  2,  1,  2,  1,  2,  1,  2],
       [-2, -2, -1, -1,  0,  0,  1,  1]])

x1 = f1(xy[0,])
x1
array([1, 4, 1, 4, 1, 4, 1, 4], dtype=int32)

x2 = f2(xy[0,])
x2
array([1, 2, 1, 2, 1, 2, 1, 2])

y1 = f3(xy[0,], xy[1,])
y1
array([5, 8, 2, 5, 1, 4, 2, 5], dtype=int32)

嗨,谢谢你的回复!函数只是方程,它们是:x1=np.exp(-1.55*x)+1.2*np.exp(-1.27629*x**(1.0/2))+0.96*np.exp(-2.07668*x**(1.0/3))x2=98.508*x**0.961y1=x1*2e6*np.exp((-y**2)/(x2**2))/2)作为供参考,我在尝试使用groupby时取得了一点成功,然而,我在完成之前就遇到了内存使用问题。我的目标数据帧将有4亿行,这对于pandas来说似乎太多了。因为您的函数只是numpy函数的组合,它们已经矢量化了,上面的解决方案必须工作(不要忘记调整变量名和格式)。对于你的内存问题,从技术上讲,只有你的硬盘会限制你。如果有必要,请打开另一个问题,因为在同一个帖子下问很多很多问题是不可取的。好吧,我确实想知道事情是否已经矢量化了,但现在我知道了。谢谢你的帮助:)我会在一台更好的机器上试一试,看看它是怎么运行的。嗨,这不是我想要的。假设我为x输入一个范围(1,11,1),为y输入一个范围(-5,5,1),我得到的是一系列10个值,长度为y1,而我在寻找10 x 10矩阵中的所有100个点