You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas DataFrame索引路线转换为坐标列表?

问题描述

我有如下结构的Pandas DataFrame:

Adress                           Demand       Coordinates
0   Depot                               10       (40.7484405, -73.985664399)
1   Solomon R. Guggenheim Museum        15       (40.7829796, -73.9589706)
2   Museum of the City of New York      20       (40.7924939, -73.951908899)
3   Rockefeller Center                  15       (40.7587402, -73.9786736)
4   Bryant Park                         10       (40.7535965, -73.9832326)
5   Lower East Side Tenement Museum     20       (40.718818, -73.9900876)

同时有如下三条路线的列表:

routes=[[0, 2, 5 , 0], [0, 4, 3, 0], [0, 1, 0]]

如何将路线列表中的DataFrame索引替换为对应的坐标值,得到目标格式的坐标路线列表?

解决方案

可以通过两步快速实现:

1. 预处理坐标列

先把DataFrame中Coordinates列的元组转换成列表格式,方便后续直接调用:

df['Coordinates'] = df['Coordinates'].apply(list)

2. 生成坐标路线列表

用嵌套列表推导式遍历每条路线,将每个索引替换为对应的坐标值:

coord_routes = [[df['Coordinates'][idx] for idx in route] for route in routes]

完整代码示例

import pandas as pd

# 构造目标DataFrame
data = {
    'Adress': ['Depot', 'Solomon R. Guggenheim Museum', 'Museum of the City of New York', 
               'Rockefeller Center', 'Bryant Park', 'Lower East Side Tenement Museum'],
    'Demand': [10, 15, 20, 15, 10, 20],
    'Coordinates': [(40.7484405, -73.985664399), (40.7829796, -73.9589706), 
                    (40.7924939, -73.951908899), (40.7587402, -73.9786736), 
                    (40.7535965, -73.9832326), (40.718818, -73.9900876)]
}
df = pd.DataFrame(data)

# 转换坐标格式
df['Coordinates'] = df['Coordinates'].apply(list)

# 定义路线列表
routes = [[0, 2, 5 , 0], [0, 4, 3, 0], [0, 1, 0]]

# 生成坐标路线
coord_routes = [[df['Coordinates'][idx] for idx in route] for route in routes]

# 输出结果
print(coord_routes)

运行后会得到符合要求的坐标路线列表,注意原示例中第二条路线的第三个坐标存在错误,上述代码会输出索引3对应的正确坐标[40.7587402, -73.9786736]。

内容的提问来源于stack exchange,提问作者chilli93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:15:52