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
相关产品推荐
相关产品推荐

