通过匹配两列高效为Pandas DataFrame新增站点名称列的最优方法
高效实现Pandas DataFrame站点名称匹配的方法
你的嵌套循环效率极低,因为Pandas的逐元素循环没有利用到底层的矢量化优化,数据量越大速度越慢。推荐用以下两种矢量化方法解决:
方法一:使用map()(简洁高效,适合仅需映射名称的场景)
先把站点编码和名称做成映射字典,再通过map()快速匹配:
# 构建站点code到name的映射字典 station_name_map = df_stations.set_index('code')['name'].to_dict() # 为行程数据添加起始站点名称 df['start_station'] = df['start_station_code'].map(station_name_map) # 添加结束站点名称 df['end_station'] = df['end_station_code'].map(station_name_map)
方法二:使用merge()(灵活扩展,适合需要关联更多字段的场景)
如果之后还需要获取站点的经纬度等信息,merge()更合适,可以分步关联起止站点的信息:
# 关联起始站点名称 df = df.merge( df_stations[['code', 'name']], left_on='start_station_code', right_on='code', how='left' ) df = df.rename(columns={'name': 'start_station'}).drop('code', axis=1) # 关联结束站点名称 df = df.merge( df_stations[['code', 'name']], left_on='end_station_code', right_on='code', how='left' ) df = df.rename(columns={'name': 'end_station'}).drop('code', axis=1)
这两种方法都是Pandas内置的矢量化操作,底层用C实现,处理速度比嵌套循环快几个数量级,数据量越大优势越明显。
内容的提问来源于stack exchange,提问作者Altagrave
相关产品推荐
相关产品推荐

