使用Pandas实现多列客户订单数据的索引统一与格式规范化
Pandas宽表转长表:多订单列转成行记录
嗨,这个需求在Pandas里用melt()函数就能轻松搞定,这是处理宽格式数据转长格式的标准工具,我给你一步步演示:
1. 先构造示例数据(模拟你的原始数据)
首先我们创建和你格式一致的测试数据,方便你直接运行验证:
import pandas as pd # 模拟你的原始客户订单数据 raw_data = { "Customer": ["John", "Shelly"], "Order1": ["This", "Thing1"], "Order2": ["That", "Thing2"], "Order3": ["The", "Thing3"] } df_raw = pd.DataFrame(raw_data)
2. 使用melt()完成转换
melt()的核心是指定保持不变的标识列和需要拆分成行的列,代码如下:
# 执行宽转长操作 df_transformed = df_raw.melt( id_vars="Customer", # 这个列会保留在每行,作为客户标识 value_vars=[col for col in df_raw.columns if col.startswith("Order")], # 所有以Order开头的列都要拆分成行 value_name="Order" # 拆分后的值列命名为"Order" ) # 可选:如果不需要原来的Order1/Order2这些列名(也就是默认生成的"variable"列),直接删掉 df_transformed = df_transformed.drop(columns="variable")
3. 转换后的结果
运行上面的代码后,你会得到完全符合需求的结构:
Customer Order 0 John This 1 Shelly Thing1 2 John That 3 Shelly Thing2 4 John The 5 Shelly Thing3
小技巧
如果你的订单列是严格按Order1、Order2...OrderN排列在Customer列之后,那value_vars可以简化成df_raw.columns[1:],不用写列表推导式,效果完全一致。
内容的提问来源于stack exchange,提问作者DrakeMurdoch
相关产品推荐
相关产品推荐

