如何用Pandas高效合并标签DataFrame与特征DataFrame?
高效合并标签与特征DataFrame的实现方案
针对10万+行的大规模数据,核心思路是用矢量化操作替代循环,利用pandas/numpy的底层优化实现高效匹配:
步骤1:生成特征数据的时间匹配键
特征DataFrame的浮点Time列,可直接取整数部分得到对应标签的整数时间(0~1秒→0,1~2秒→1,以此类推),用矢量化方法实现:
import pandas as pd # 假设特征DataFrame为df_feature,标签DataFrame为df_label df_feature['match_time'] = df_feature['Time'].astype(int) # 若需严格匹配左闭右开区间(如0<=Time<1对应标签0),astype(int)完全适用
步骤2:高效合并数据
根据标签数据的结构,选择两种高效方案:
方案A:字典映射(最快,适用于标签Time无重复)
先将标签数据转为字典,再通过映射添加标签列:
# 构建Time到Label的映射字典 label_dict = df_label.set_index('Time')['Label'].to_dict() # 批量映射标签 df_feature['Label'] = df_feature['match_time'].map(label_dict) # 清理临时列 df_feature.drop(columns=['match_time'], inplace=True)
方案B:Merge合并(适用于标签Time有重复或需保留标签其他列)
利用pandas的merge方法(基于哈希表实现,效率远高于循环匹配):
merged_df = pd.merge( df_feature, df_label, left_on='match_time', right_on='Time', how='left' # 保留所有特征数据,无匹配则标签为NaN ) # 清理冗余列并重命名 merged_df.rename(columns={'Time_x': 'Time'}, inplace=True) merged_df.drop(columns=['match_time', 'Time_y'], inplace=True)
效率说明
上述操作均为pandas/numpy的矢量化操作,底层由C语言实现,处理10万+行数据仅需毫秒级时间,完全避免了Python循环的性能瓶颈。
内容的提问来源于stack exchange,提问作者Fang660914
相关产品推荐
相关产品推荐

