将随机纬度/长点合并到熊猫人口普查区域的旅行调查数据

时间:2013-10-21 19:55:49

标签: python merge pandas gis

我有一点GIS经验,现在我正在努力学习大熊猫。任何帮助,将不胜感激。这里的目标是将一个点加入一个人。

我已经尝试了合并和连接,但这并没有给我正确的输出,方式太多了。我尝试用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

另外,我的任务背景是在每个人口普查区块中生成适当数量的随机点,并将它们连接回旅行调查数据,以便可以在点可视化器中显示。

3 个答案:

答案 0 :(得分: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

希望这有帮助。

答案 1 :(得分:1)

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

最简单,最简单的方法是简单地将set2列添加到set1,如下所示:

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

这假设订单在两个数据帧之间匹配,在您的情况下似乎是真的,或者您当然可以先将它们排序,因此它们的顺序相同。

答案 2 :(得分:0)

来自pandas docs的合并签名:

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列,然后继续合并。