如何在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
相关产品推荐
相关产品推荐

