如何优化Pandas宽表转两列长表操作,寻求高效替代方案
高效实现Pandas宽表转长表的优化方案
你当前用链式转置、unstack的方法在数据量较大时性能不足,推荐使用Pandas原生的pd.melt()函数,这是专门为宽表转长表设计的优化接口,性能远优于手动组合操作。
原宽表数据
import pandas as pd wide = pd.DataFrame( { 'id':['foo'], 'a':[1], 'b':[2], 'c':[3], 'x':[4], 'y':[5], 'z':[6] } )
优化后的实现代码
lon = pd.melt( wide, id_vars=['id'], # 保留不参与转换的列 var_name='type', # 原列名对应的新列名 value_name='val' # 原列值对应的新列名 )
运行结果
id type val 0 foo a 1 1 foo b 2 2 foo c 3 3 foo x 4 4 foo y 5 5 foo z 6
性能优势说明
pd.melt()是Pandas底层优化过的宽转长实现,直接基于数组操作完成列的重塑,避免了set_index()、.T转置、unstack()等步骤带来的内存拷贝与额外计算开销,在十万级以上数据量的场景下,性能提升会非常明显。
内容的提问来源于stack exchange,提问作者bismo
相关产品推荐
相关产品推荐

