如何透视Pandas DataFrame 使每个值对应单独行且保留编号与名称列
实现方案
核心思路
你需要的是将宽格式DataFrame转换为长格式,直接使用Pandas内置的melt方法即可完成,无需复杂的自定义逻辑。
完整实现代码
import pandas as pd # 1. 读取本地CSV文件,分隔符为|,自动去除字段前后的空格 df = pd.read_csv('你的本地文件路径.csv', sep='|', skipinitialspace=True) # 2. 清理列名前后的空格,避免列名存在多余空格导致报错 df.columns = df.columns.str.strip() # 3. 宽表转长表 long_df = df.melt( # 指定要保留的公共字段 id_vars=['Number', 'Name'], # 指定要展开为行的字段 value_vars=['v1', 'v2', 'v3', 'v4'], # 定义展开后存储值的列名 value_name='values', # 临时存储原v1/v2等字段名的列,后续删除 var_name='to_drop' # 删除不需要的临时列 ).drop('to_drop', axis=1) # 4. 按Number排序,和你示例的输出顺序保持一致 long_df = long_df.sort_values(by='Number', ignore_index=True) # 查看结果 print(long_df)
输出验证
运行后得到的long_df完全符合要求的格式:
| Number | Name | values |
|---|---|---|
| 100000 | Name1 | value1 |
| 100000 | Name1 | value2 |
| 100000 | Name1 | value3 |
| 100000 | Name1 | value4 |
| 200000 | Name2 | value1 |
| ... | ... | ... |
内容的提问来源于stack exchange,提问作者John G Smith
相关产品推荐
相关产品推荐

