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

如何用Pandas将长格式DataFrame转换为指定宽格式?

Pandas实现长格式转宽格式(替代R reshape2::cast)

嘿,刚好我也用过R的reshape2,Pandas里对应的功能其实用pivot或者pivot_table就能完美解决,完全满足你把长格式转成指定宽格式的需求!

先看你的原始数据:

import pandas as pd

x = {'col0': [1, 1, 2, 2], 'col1': ['a', 'b', 'a', 'b'], 'col2': ['x', 'x', 'x', 'x'], 'col3': [12, 13, 14, 15]}
y = pd.DataFrame(data=x)

方法1:用pivot(无重复组合时首选)

因为你的数据里col0 + col1 + col2的组合是唯一的,没有重复值,直接用pivot就可以:

# 先做透视转换
y_pivot = y.pivot(
    index='col0',       # 作为行标识的列(对应cast里的id变量)
    columns=['col1', 'col2'],  # 用来展开成新列的分组变量
    values='col3'       # 填充到新列的数值(对应cast里的value变量)
).reset_index()

# 把多级列名改成你要的格式:col3__{col1}_{col2}
y_pivot.columns = ['col0'] + [f'col3__{col1}_{col2}' for col1, col2 in y_pivot.columns[1:]]

# 最终结果就是你要的y2
y2 = y_pivot

运行后得到的y2就是:

col0col3__a_xcol3__b_x
11213
21415

方法2:用pivot_table(有重复组合时用)

如果你的数据里存在同一个col0 + col1 + col2对应多个col3值的情况(比如重复记录),就用pivot_table,可以指定聚合函数(比如求和、均值):

y_pivot = y.pivot_table(
    index='col0',
    columns=['col1', 'col2'],
    values='col3',
    aggfunc='mean'  # 这里用均值,你可以换成sum、max等适配需求
).reset_index()

# 同样处理列名
y_pivot.columns = ['col0'] + [f'col3__{col1}_{col2}' for col1, col2 in y_pivot.columns[1:]]

适配col1多值的情况

不管你的col1有3种还是更多不同值,这个代码都能自动生成对应的列。比如如果col1新增了c,代码会自动生成col3__c_x列,完全不用手动修改!

内容的提问来源于stack exchange,提问作者Chase Grimm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:12:25