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

如何按每3行一组为Python DataFrame添加同值列?

问题:给DataFrame按每3行一组添加分组标识列

现有一个包含n行的DataFrame(n可被3整除),原始数据示例如下:

1 2 3
4 5 6
4 2 3
3 1 9
6 7 0
9 2 5

需求是按每3行一组添加一列,每组内该列值相同,处理后效果如下:

1 2 3 A
4 5 6 A
4 2 3 A
3 1 9 B
6 7 0 B
9 2 5 B

请问最优实现方法是什么?


最优实现方法

这是个很常见的分组标识需求,我推荐几种高效的实现方式,其中基于索引计算的方法是最优选择——它简洁、内存占用低,尤其适合大样本量的DataFrame:

方法1:索引整除+字母转换(最推荐)

利用DataFrame的索引直接计算分组编号,再把编号转换成对应的字母标识,代码非常简洁:

import pandas as pd

# 构造示例DataFrame
data = [[1,2,3],[4,5,6],[4,2,3],[3,1,9],[6,7,0],[9,2,5]]
df = pd.DataFrame(data, columns=['col1','col2','col3'])

# 核心代码:按每3行分组,生成A/B/C...的标识列
df['group'] = (df.index // 3).apply(lambda x: chr(ord('A') + x))

原理说明:

  • df.index // 3会给每一行生成组编号:前3行是0,接下来3行是1,以此类推
  • chr(ord('A') + x)把编号0转成A,1转成B,轻松实现字母序列的分组标识
  • 这种方法不需要生成额外的重复数组,计算过程轻量化,时间复杂度为O(n),大数据量下优势明显

方法2:自定义标签+重复序列(适合固定标签场景)

如果你的分组标签不是A/B这种字母序列,而是自定义字符串,可以先生成标签列表,再重复对应次数:

import pandas as pd

df = pd.DataFrame(data, columns=['col1','col2','col3'])
n_groups = len(df) // 3
# 自定义分组标签
custom_labels = ['Group_X', 'Group_Y']
# 重复每个标签3次,添加为新列
df['group'] = pd.Series(custom_labels).repeat(3).values

适用场景:

当分组标签是固定的、非连续序列时,这种方法更直观,但需要提前知道分组数量,内存占用略高于方法1(因为要生成重复序列)

方法3:数字分组标识(最简版)

如果不需要字母/自定义标签,只需要数字分组号,直接一行代码搞定:

df['group'] = df.index // 3

处理后列值会是0,0,0,1,1,1...,适合只需要区分分组的场景,效率最高


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:37:30