为Pandas DataFrame中的唯一值创建LineString

时间:2017-05-25 13:31:28

标签: python pandas dataframe shapely

我想要迭代的pandas数据帧。例如,我的数据框的简化版本可以是:

abc    begin   end    ID     Lat      Long
def1    001    123    CAT    13.167   52.411
def2    002    129    DOG    13.685   52.532
def3    003    145    MOOSE  13.698   52.131
def1    004    355    CAT    13.220   52.064
def2    005    361    CAT    13.304   52.121
def3    006    399    DOG    12.020   52.277
def1    007    411    MOOSE  13.699   52.549
def2    008    470    MOOSE  11.011   52.723

我想迭代每个唯一ID并从匹配的Lat / Long列创建一个(形状)LineString。

grp = df.groupby('ID')
for x in grp.groups.items():
# this is where I need the most help

对于上面的例子,我希望将3个LineStrings的3次迭代放回到单个字典中。

{'CAT':LINESTRING (13.167 52.411, 13.22 52.064, 13.304 52.121), 'DOG':LINESTRING (13.685 52.532, 12.02 52.277), 'MOOSE':LINESTRING (13.698 52.131, 12.699 52.549, 13.011 52.723)}

1 个答案:

答案 0 :(得分:1)

我没有安装LINESTRING软件包,但我想您可以轻松地将d中的内容转换为您需要的格式。

d = {}
df.groupby('ID').apply(lambda x: d.update({x.ID.iloc[0]:x[['Lat','Long']].values.tolist()}))

{'CAT': [[13.167, 52.411], [13.22, 52.064], [13.304, 52.121]],
 'DOG': [[13.685, 52.532], [12.02, 52.277]],
 'MOOSE': [[13.698, 52.131], [13.699, 52.549], [11.011, 52.723]]}