多列多行数据透视求助:如何同时处理New、LikeNew、Old三列透视?
分步实现多列数据的透视转换
问题场景
先明确下你的数据和目标:
原始数据:
ID New LikeNew Old Warehouse 1 10 100 20 LA 1 12 130 40 CA 2 90 200 10 LA 2 103 230 30 CA
期望转换后的格式:
ID LA_new LA_likeNew LA_Old CA_New CA_LikeNew CA_Old 1 10 100 20 12 130 40 2 90 200 10 103 230 30
你提到只能单独对每一列执行pivot操作,没法同时处理三列,那我们可以分列透视后合并,具体步骤如下(以Python pandas为例):
步骤1:准备原始数据
先把数据转换成DataFrame格式:
import pandas as pd data = { 'ID': [1, 1, 2, 2], 'New': [10, 12, 90, 103], 'LikeNew': [100, 130, 200, 230], 'Old': [20, 40, 10, 30], 'Warehouse': ['LA', 'CA', 'LA', 'CA'] } df = pd.DataFrame(data)
步骤2:分别对每一列执行透视并重命名列
对New、LikeNew、Old三列分别做透视,同时给列加上仓库前缀,避免合并时列名冲突:
# 透视New列,重命名列如LA_New、CA_New pivot_new = df.pivot(index='ID', columns='Warehouse', values='New') \ .rename(columns=lambda x: f"{x}_New") \ .reset_index() # 透视LikeNew列,重命名列如LA_LikeNew、CA_LikeNew pivot_like_new = df.pivot(index='ID', columns='Warehouse', values='LikeNew') \ .rename(columns=lambda x: f"{x}_LikeNew") \ .reset_index() # 透视Old列,重命名列如LA_Old、CA_Old pivot_old = df.pivot(index='ID', columns='Warehouse', values='Old') \ .rename(columns=lambda x: f"{x}_Old") \ .reset_index()
步骤3:合并三个透视表
通过ID字段将三个透视表合并在一起,最后调整列顺序到你想要的格式:
# 基于ID合并三个表 final_df = pivot_new.merge(pivot_like_new, on='ID').merge(pivot_old, on='ID') # 调整列顺序,和目标格式一致 final_df = final_df[['ID', 'LA_New', 'LA_LikeNew', 'LA_Old', 'CA_New', 'CA_LikeNew', 'CA_Old']] # 查看结果 print(final_df)
运行后就能得到你期望的宽表格式啦!这种方法的核心是把多列透视拆解成单步操作,再通过公共键ID聚合,完美适配你只能单独pivot每一列的限制。
内容的提问来源于stack exchange,提问作者jimbo R
相关产品推荐
相关产品推荐

