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

Pandas:如何基于GroupBy创建新索引,实现分组表格转换?

解决方案:将表1转换为带分组索引的表2

完全可以实现表1到表2的转换,而且不需要必须显式使用groupby语句,但split-apply-combine正是实现这类分组计数需求的核心思路,Pandas的groupby方法本身就是对该模式的封装。以下是具体实现步骤:

核心逻辑说明

  1. 保留全局索引:原表的行号直接对应表2中的global_index,提取即可。
  2. 生成分组内独立索引:针对class_section分组,给每个组内的行分配从0开始的自增序号,即group_index。
  3. 调整排序与列顺序:按class_section分组排序,再调整列的排列顺序匹配表2结构。

代码实现

假设原表数据存储在Pandas DataFrame df中:

import pandas as pd

# 构造表1对应的DataFrame
data = {
    'name': ['Morris', 'Gertie', 'Kristal', 'Roslyn', 'Tari', 'Dewayne', 'Edward', 'Frank'],
    'movie_watch_count': [2, 3, 3, 4, 7, 1, 6, 0],
    'class_section': [2, 1, 1, 2, 2, 1, 2, 2]
}
df = pd.DataFrame(data)

# 1. 添加global_index列(直接使用原表行号)
df['global_index'] = df.index

# 2. 生成group_index:按class_section分组后累计计数(split-apply-combine的典型应用)
df['group_index'] = df.groupby('class_section').cumcount()

# 3. 按class_section排序,调整列顺序匹配表2
result = df.sort_values('class_section')[['global_index', 'group_index', 'name', 'movie_watch_count', 'class_section']].reset_index(drop=True)

print(result)

输出结果验证

运行后得到的result完全匹配表2结构:

global_indexgroup_indexnamemovie_watch_countclass_section
010Gertie31
121Kristal31
252Dewayne11
300Morris22
431Roslyn42
542Tari72
663Edward62
774Frank02

关于实现方式的补充说明

  • split-apply-combine的本质:df.groupby('class_section').cumcount()就是split(按class_section拆分数据)→ apply(对每个组执行累计计数)→ combine(将结果合并回原表)的过程,完全符合你提到的split-apply-combine技术。
  • 是否必须用groupby:不是必须,但groupby是最简洁高效的实现方式。如果不用groupby,可以手动拆分每个组、单独计数再合并,但代码会冗余且效率更低,没有必要舍近求远。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:50:27