Pandas Dataframe:没有iterrows的列上的操作()

时间:2016-01-25 19:00:26

标签: python pandas dataframe

尽管令人困惑的标题我的问题很简单:我有一个DataFrame,其坐标为几个实体,并且想要计算它们的距离,而不必在每一行上运行。我的DataFrame名为S,看起来像

Template.registerHelper("currentUser", function(input) {
    return Session.get("userMail") === input;
});

我想计算每个段的距离。目前我正在这样做

                   X        Y
   id
4000000030992760  542478  175110
4000000030146750  538252  175394
4000000030237400  536188  176897
4000000030099730  536496  174693
4000000030418980  529663  181684
4000000030238500  532567  179727
4000000030146350  535936  173268
4000000030146220  535051  173088
4000000030709450  539079  173084
4000000031197690  522850  178571

但我确信有一种更有效的程序方法。

由于

1 个答案:

答案 0 :(得分:1)

所以你想建立一个距离矩阵? 如果是这样,您可以使用scipysklearn中已编写的函数,如:

DataFrame

更一般地说,您要查找的是apply列的矢量化属性。您可以使用已经向量化的函数(如 numpy )和运算符。如果没有,您可以使用applymap方法(或def make_dist_mat(xy): d0 = np.subtract.outer(xy[:,0], xy[:,0]) d1 = np.subtract.outer(xy[:,1], xy[:,1]) return np.hypot(d0, d1) make_dist_mat(df[['X', 'Y']].astype(float).values) )将函数应用于列(或您的行)而不对其进行迭代(pandas documentation关于该行)。

计算所有位置之间距离的有效方法可能是:

Graphics g = Graphics.FromImage(this.pictureBox1.Image);
g.Clear(this.pictureBox1.BackColor);