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

如何在Python中正确拆分或重塑数据集为宽格式?

问题描述

我有如下初始数据集:

列A列B列C
客户1xxxxxxppppp
客户1yyyyyyppppp
客户1zzzzzzuuuuu
客户2aaaaaa
客户3bbbbb
客户3ccccccddddd

希望转换为如下格式:

列A列B列C列B2列C2列B3列C3
客户1xxxxxxpppppyyyyyypppppzzzzzzuuuuu
客户2aaaaaa
客户3bbbbbccccccddddd

请问如何在Python中实现这一数据集的拆分或重塑操作?


实现方法

可以用Python的pandas库完成这个数据重塑操作,核心思路是先为每个客户的分组添加行序号,再将长格式数据转成宽格式。

步骤1:导入库并加载数据

先准备初始数据,这里用字典模拟,实际场景也可以从CSV/Excel等文件读取:

import pandas as pd

data = {
    '列A': ['客户1', '客户1', '客户1', '客户2', '客户3', '客户3'],
    '列B': ['xxxxxx', 'yyyyyy', 'zzzzzz', 'aaaaaa', '', 'cccccc'],
    '列C': ['ppppp', 'ppppp', 'uuuuu', '', 'bbbbb', 'ddddd']
}

df = pd.DataFrame(data)

步骤2:为分组添加行序号

按列A分组,给每个客户下的行标记序号,区分同一客户的不同记录:

df['序号'] = df.groupby('列A').cumcount() + 1

执行后,客户1的三行分别标记1、2、3,客户2标记1,客户3标记1、2。

步骤3:转换为宽格式

用pivot方法将长数据转成宽数据,再整理列名:

# 转宽格式
pivoted_df = df.pivot(index='列A', columns='序号', values=['列B', '列C'])

# 合并多层列名,生成列B2、列C2这类命名
pivoted_df.columns = [f'{col[0]}{col[1]}' if col[1] > 1 else col[0] for col in pivoted_df.columns]

# 把列A从索引转回普通列,补全缺失值为空字符串
pivoted_df = pivoted_df.reset_index().fillna('')

步骤4:调整列顺序(可选)

如果需要和目标表格的列顺序完全匹配,手动指定列顺序即可:

final_columns = ['列A', '列B', '列C', '列B2', '列C2', '列B3', '列C3']
pivoted_df = pivoted_df[final_columns]

运行以上代码后,pivoted_df就是符合需求的数据集。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:20:28