如何用pandas高效实现DataFrame添加标签列并合并两个数据集
最优实现方案
完全可以用pandas内置的矢量化操作实现,无需循环,性能远高于逐行拼接的写法,两种常用写法如下:
写法1:stack实现(代码最简洁)
import pandas as pd # 堆叠df1转为长格式单列 df_new = df1.stack().reset_index(drop=True).to_frame('value') # 按行对应关系重复标签,直接赋值 df_new['label'] = df2[0].repeat(df1.shape[1]).values
写法2:melt实现(逻辑更直观)
# 重置行索引后用melt转长表 df_melt = df1.reset_index().melt(id_vars='index', value_name='value') # 按原行顺序排序保证标签对应 df_melt = df_melt.sort_values('index').reset_index(drop=True) # 匹配对应标签 df_melt['label'] = df2.iloc[df_melt['index']][0].values # 提取需要的列 df_new = df_melt[['value', 'label']]
性能说明
你原来的写法中每次循环都执行pd.concat,会产生大量中间对象,时间复杂度为O(n²),数据量越大性能衰减越严重。上面两种写法都是pandas原生矢量化操作,时间复杂度为O(n),百万级数据量下也能快速完成计算。
内容的提问来源于stack exchange,提问作者olzalk
相关产品推荐
相关产品推荐

