我有一点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
另外,我的任务背景是在每个人口普查区块中生成适当数量的随机点,并将它们连接回旅行调查数据,以便可以在点可视化器中显示。
答案 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列,然后继续合并。