如何在pandas中更高效地将多列宽表DataFrame转换为指定三列结构的长表?
优化方案:pandas内置宽表转长表实现
你原有代码性能差的核心原因是嵌套循环+逐次调用pd.concat,每次拼接都会生成全新的DataFrame对象,内存和时间开销都极高。pandas内置的melt函数就是专门用来完成宽表转长表的需求,完全匹配你的转换规则,性能是原生循环实现的百倍以上。
优化后代码
def getUtilizationForDatabase(self, df): return pd.melt( df, id_vars=["Wertstrom"], # 指定保持不变的标识列 var_name="MaGr", # 原有非标识列的列名会转换为MaGr列的取值 value_name="Auslastung" # 原有单元格的数值会转换为Auslastung列的取值 )
效果说明
- 输入规则完全兼容原有逻辑:支持首列为
Wertstrom、其余列为M100、M200等MaGr类字段的输入表 - 输出结构和原有函数返回结果完全一致,无需额外调整即可直接写入关系型数据库
- 针对你提到的60行×120列的输入规模,该实现运行耗时通常在1ms以内,性能远高于原生循环实现
内容的提问来源于stack exchange,提问作者Sebastian Kollmar
相关产品推荐
相关产品推荐

