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

如何在Pandas中按每K行递增生成ID列(无循环实现)

Pandas实现按固定行数生成递增ID列

修正原数据创建代码

首先注意你提供的Series定义中,"is"和"some"之间缺少逗号,会导致合并成字符串"issome",正确的创建代码如下:

import pandas as pd

df = pd.Series(["this", "is", "some", "text", "which", "is", "not", "valid"]).to_frame(name='my_text')

(若你确实需要7行数据,可去掉最后一个元素"valid")

实现方法(无循环)

设定K=3,以下是几种高效的Pandas/numpy实现方式:

方法1:整数除法(最简洁)

利用索引的整数除法分组,直接生成ID:

K = 3
df['ID'] = (df.index // K) + 1

原理:索引从0开始,df.index // K会将每K行归为一组(0-2→0,3-5→1,6→2),加1后得到从1开始的递增ID。

方法2:numpy向上取整

通过np.ceil对"行号(从1开始)/K"向上取整:

import numpy as np

K = 3
df['ID'] = np.ceil((df.index + 1) / K).astype(int)

原理:将索引转换为从1开始的序列,除以K后向上取整,确保不足K行的最后一组也会递增ID。

方法3:pd.cut区间分组

通过区间划分实现分组并分配ID:

import numpy as np

K = 3
# 生成分组区间:0-3, 3-6, 6-...
bins = np.arange(0, len(df) + 1, K)
# 为每个区间分配从1开始的标签
df['ID'] = pd.cut(df.index, bins=bins, labels=np.arange(1, len(bins))).astype(int)

最终结果

以7行数据为例,生成的DataFrame如下:

my_text  ID
0    this   1
1      is   1
2    some   1
3    text   2
4   which   2
5      is   2
6     not   3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:03:39