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

Pandas:匹配值以获取完整路线索引的实现需求

解决Pandas中匹配路线片段并生成对应索引列的问题

针对你的需求,我这里提供两种实用的方法来实现:把DF2中的In_Route值和DF1中Route列的逗号分隔片段匹配,然后将对应的DF1索引拼接成字符串添加到新列Complete_Route_Index中。

首先先构造示例数据(你可以直接替换成自己的真实DataFrame):

import pandas as pd

# 示例DF1
df1 = pd.DataFrame({
    'Route': ['0C,5', '2A,5,1', '5,0C'],
    'Latitude': [1.23, 2.23, 3.23],
    'Longitude': [1.23, 2.23, 3.23]
})

# 示例DF2
df2 = pd.DataFrame({
    'In_Route': ['5', '0C', '1'],
    'Rides': [30, 50, 20]
})

方法一:字典映射法(直观易懂,适合小数据集)

这种方法通过遍历DF1构建一个"路线片段→对应索引列表"的映射字典,再快速匹配到DF2中:

# 构建路线片段与DF1索引的映射字典
route_to_indices = {}
for idx, route_str in df1['Route'].items():
    # 拆分每个Route为单独的片段
    segments = route_str.split(',')
    for seg in segments:
        if seg not in route_to_indices:
            route_to_indices[seg] = []
        # 将当前索引转为字符串存入列表
        route_to_indices[seg].append(str(idx))

# 给DF2新增目标列
df2['Complete_Route_Index'] = df2['In_Route'].apply(lambda x: ','.join(route_to_indices.get(x, '')))

方法二:Pandas原生操作法(高效,适合大数据集)

如果你的数据量较大,推荐使用Pandas的explode和groupby来实现,避免显式循环,效率更高:

# 将DF1的Route列拆分为列表并展开成多行
df1_exploded = df1.assign(Route=df1['Route'].str.split(',')).explode('Route')

# 按Route片段分组,收集对应的索引并拼接成字符串
index_mapping = df1_exploded.groupby('Route').apply(lambda group: ','.join(group.index.astype(str)))

# 将映射结果合并到DF2中
df2 = df2.merge(
    index_mapping.rename('Complete_Route_Index'),
    left_on='In_Route',
    right_index=True,
    how='left'  # 保留DF2所有行,没有匹配的会显示NaN,可按需处理
)

验证结果

运行上述任意一种方法后,打印DF2就能得到你期望的结果:

print(df2)

输出:

In_Route  Rides Complete_Route_Index
0        5     30                0,1,2
1       0C     50                  0,2
2        1     20                    1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:19:31