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

如何用更简便的方法重塑Pandas DataFrame?

Pandas DataFrame 重塑的简便实现

先看你的原始数据构造代码:

import pandas as pd
L = range(0,12)
df = pd.DataFrame(
    {
        'Col_1': ['a', 'b', 'c','a', 'b', 'c','a', 'b', 'c','a', 'b', 'c'],
        'Col_2': ['', '', '','', '', '','', '', '','', '', ''],
        'Col_3': ['x', 'y', 'z','xx', 'yy', 'zz','xxx', 'yyy', 'zzz','x1', 'y2', 'z3']
    },
    index = L
)

从数据结构能看出来,Col_1的a/b/c每3行构成一组,每组对应Col_3的一组值,目标是把每组的a/b/c转为列,每组对应一行。下面是两种比自定义冗长函数简便得多的实现方式:

方法1:用pivot配合组编号

先给每组添加一个标识列,再通过pivot直接完成重塑:

# 生成组编号:每个Col_1值的出现次数作为组ID
df['group_id'] = df.groupby('Col_1').cumcount()

# 执行重塑
reshaped_df = df.pivot(index='group_id', columns='Col_1', values='Col_3').reset_index(drop=True)

方法2:用groupby + unstack(更简洁)

不需要额外添加列,直接通过分组后转置完成:

# 按Col_1分组提取Col_3值,转为Series后转置
reshaped_df = df.groupby('Col_1')['Col_3'].apply(list).apply(pd.Series).T

两种方法最终得到的结果一致,结构如下:

a    b    c
0    x    y    z
1   xx   yy   zz
2  xxx  yyy  zzz
3   x1   y2   z3

内容的提问来源于stack exchange,提问作者Alan Nuñez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:31:06