2

我有一点 GIS 经验,现在正在尝试学习 pandas。任何帮助,将不胜感激。这里的目标是将一个点连接到一个人。

我已经尝试过合并和加入,但这并没有给我正确的输出,太多的值。我试过用 drop_duplicates 和独特的方法按摩合并输出,但到目前为止还没有运气。我已经阅读了合并文档,我觉得有一种简单的方法可以做到这一点......但到目前为止我还没有找到它。

以下是我的数据和所需输出的示例。

谢谢你的帮助!

设置 1

    XCORD        YCORD       DTRACT
    -74.630496   40.530064   34035053804
    -74.637525   40.557955   34035053804
    -74.628739   40.528239   34035053804
    -74.638959   40.533796   34035053804
    -74.638852   40.510520   34035053804
    -74.638853   40.510527   34035053810
    -74.638858   40.510514   34035053810

设置 2

     PLSAM           DTRACT
     30000560102     34035053804
     30000560103     34035053804
     30000560104     34035053804
     30000560105     34035053804
     30000560106     34035053804
     30000560107     34035053810
     30000560108     34035053810

期望的输出

     XCORD       YCORD       DTRACT        PLSAM
    -74.630496   40.530064   34035053804   30000560102
    -74.637525   40.557955   34035053804   30000560103
    -74.628739   40.528239   34035053804   30000560104
    -74.638959   40.533796   34035053804   30000560105
    -74.638852   40.510520   34035053804   30000560106
    -74.638853   40.510527   34035053810   30000560107
    -74.638858   40.510514   34035053810   30000560108

顺便说一句,我任务的背景是在每个人口普查块中生成适当数量的随机点,并将它们连接回旅行调查数据,以便可以在点可视化器中对其进行可视化。

4

3 回答 3

1

我认为这比您想象的要简单得多,合并和连接在您的情况下不起作用的原因是,尽管您有一个公共列,但值不是唯一的,如果两个数据帧的索引都是相同,但在您的情况下,它们似乎不是。

最简单和最容易的事情是简单地将列从添加set2set1像这样:

set1['PLSAM'] = set2['PLSAM']

这假设两个数据帧之间的顺序匹配,这在您的情况下似乎是正确的,或者您当然可以先对它们进行排序,以便它们具有相同的顺序。

于 2013-10-23T07:17:16.620 回答
1

忘了merge。也许是因为我使用了很多数据库,但我更喜欢数据框的join方法,我非常喜欢为每个数据框定义索引。像这样:

In [97]: df1 = pandas.DataFrame(np.random.normal(size=(5,2), loc=30), columns=['x','y'], index=list('abcde'))

In [98]: df1.index.name = 'DTRACT'

In [99]: df1
Out[99]:
                x          y
DTRACT
a       29.804012  28.999263
b       29.933187  29.602694
c       29.269713  28.577094
d       29.857837  29.634982
e       29.751243  29.020471

In [100]: df2 = pandas.DataFrame(np.random.random_integers(0, high=20, size=(5,2)), columns=['A', 'B'], index=list('bcdef'))

In [101]: df2.index.name = 'DTRACT'

In [102]: df2
Out[102]:
         A   B
DTRACT
b        9  12
c       16   1
d       19  20
e       11  20
f       10  15

In [103]: df1.join(df2, how='outer')
Out[103]:
                x          y   A   B
DTRACT
a       29.804012  28.999263 NaN NaN
b       29.933187  29.602694   9  12
c       29.269713  28.577094  16   1
d       29.857837  29.634982  19  20
e       29.751243  29.020471  11  20
f             NaN        NaN  10  15

希望这会有所帮助。

于 2013-10-22T16:32:32.850 回答
0

来自 pandas 文档的合并签名:

merge(left, right, how='left', on=None, left_on=None, right_on=None,
  left_index=False, right_index=False, sort=True,
  suffixes=('_x', '_y'), copy=True)

你试过运行这个吗?

merge(set1, set2, on="DTRACT")

如果这不起作用,最可能的问题是索引不匹配。我的建议是将每个数据框的索引设置为 DTRACT 列,然后继续合并。

于 2013-10-21T20:45:44.733 回答