You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多列多行数据透视求助:如何同时处理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:25:21