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

pandas实现groupby分组后将组内行数据转换为新列的方法

长表按分组转宽表实现方案

以下方案基于Python Pandas实现,覆盖固定每组2行、支持任意组内行数两种需求场景。

每组固定2行场景

核心逻辑是先按Group分组,给组内每条记录按原始顺序标记从1开始的序号,再通过透视把行数据转为列数据,最后调整列名和顺序匹配目标结构即可。

import pandas as pd

# 读取/构造原始长表数据
df = pd.DataFrame({
    "Group": [1, 1, 2, 2, 3, 3],
    "Value": [1.1, 1.2, 1.4, 1.6, 0.4, 0.3],
    "Name": ["AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF"]
})

# 给组内记录加序号
df["seq"] = df.groupby("Group").cumcount() + 1

# 透视转宽表并调整格式
wide_df = df.pivot(index="Group", columns="seq", values=["Value", "Name"])
wide_df.columns = [f"{col}_{idx}" for col, idx in wide_df.columns]
wide_df = wide_df.reset_index()[["Group", "Value_1", "Name_1", "Value_2", "Name_2"]]

运行以上代码得到的输出和给出的目标样例结构、数据完全一致。

每组任意行数通用场景

不需要提前统计每组的记录条数,在固定场景逻辑基础上去掉手动指定列的步骤即可自动适配,不同分组行数不一致时,缺失的记录位会自动填充空值:

import pandas as pd

# 通用转换逻辑,自动适配组内行数
df["seq"] = df.groupby("Group").cumcount() + 1
wide_df = df.pivot(index="Group", columns="seq", values=["Value", "Name"])
# 按序号排序列,保证Value_n、Name_n的顺序符合预期
wide_df = wide_df.sort_index(axis=1, level=1)
wide_df.columns = [f"{col}_{idx}" for col, idx in wide_df.columns]
wide_df = wide_df.reset_index()
  • 转换过程保留原始数据的组内顺序,不会打乱原有记录排列
  • 新增列会自动按组内最大记录数生成,比如所有组最多有3条记录时,会自动生成Value_3、Name_3列
  • 组内记录数不足最大值时,对应列自动填充NaN空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:51:22