为 Pandas DataFrame 中的唯一值创建 LineString

Create LineString for unique values in Pandas DataFrame

我有一个 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 个 LineString 放回单个字典中进行 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)}

我没有安装 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]]}