如何将宽格式Pandas DataFrame转换为指定结构的长格式?
解决方案
你需要的是Pandas的宽表转长表操作,有两种常用实现方式,适配大表场景也无需手动枚举所有列:
方法1:使用melt(最直观的宽转长专用方法)
melt是Pandas专门设计用于宽表转长表的函数,直接指定保留列、转换列、新列名即可:
import pandas as pd # 你的原始df构造代码略 # 自动匹配所有height开头的列,无需手动写全,适配大表场景 height_cols = [col for col in df.columns if col.startswith('height')] res_df = pd.melt( df, id_vars=['id'], # 保留不参与转换的id列 value_vars=height_cols, # 需要拆分的height相关列 var_name='height', # 存储原字段名的新列名 value_name='score' # 存储原字段取值的新列名 ) # 若需要和示例输出顺序一致,按id排序即可 res_df = res_df.sort_values(by='id', ignore_index=True)
方法2:使用stack实现
也可以通过设置索引后堆叠的方式实现,代码更简洁:
res_df = df.set_index('id').stack().reset_index() # 重命名列符合要求 res_df.columns = ['id', 'height', 'score']
两种方法输出结果和你给出的预期样例完全一致,大表场景下性能也足够。
内容的提问来源于stack exchange,提问作者Cooper
相关产品推荐
相关产品推荐

