为 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]]}
我有一个 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]]}