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

使用Python Pandas实现数据分组转换:长表转宽表

把长格式数据转成宽格式的Python代码

原始长格式数据:

A   12  
B   15
C    9
C   12
B   15 
A   24 
B    9
C    3
A    9

目标宽格式输出:

A   B   C
12  15  9
24  15  12
9   9   3

方法一:用pandas快速实现

pandas是处理表格数据的常用工具,几行代码就能完成转换:

import pandas as pd

# 模拟原始数据(实际可替换成读取文件,比如用pd.read_csv)
raw_data = """A   12  
B   15
C    9
C   12
B   15 
A   24 
B    9
C    3
A    9"""

# 拆分每行数据并转为DataFrame
lines = [line.strip().split() for line in raw_data.splitlines()]
df = pd.DataFrame(lines, columns=['类别', '数值'])
df['数值'] = df['数值'].astype(int)

# 给每个类别的条目添加分组序号,用来对应宽格式的行
df['组号'] = df.groupby('类别').cumcount()

# 转换为宽格式并调整输出样式
wide_df = df.pivot(index='组号', columns='类别', values='数值').reset_index(drop=True)
# 指定列顺序,打印时去掉索引
print(wide_df[['A', 'B', 'C']].to_string(index=False))

方法二:纯Python实现(无需第三方库)

如果不想依赖pandas,用原生Python也能完成:

raw_data = """A   12  
B   15
C    9
C   12
B   15 
A   24 
B    9
C    3
A    9"""

# 按类别分组存储数值
category_values = {}
for line in raw_data.splitlines():
    key, val = line.strip().split()
    val = int(val)
    if key not in category_values:
        category_values[key] = []
    category_values[key].append(val)

# 定义输出的列顺序
columns = ['A', 'B', 'C']
# 获取行数(每个类别下的条目数一致)
row_num = len(category_values[columns[0]])

# 打印表头
print('\t'.join(columns))
# 逐行打印对应位置的数值
for i in range(row_num):
    row_data = [str(category_values[key][i]) for key in columns]
    print('\t'.join(row_data))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:24:32