如何在Pandas DataFrame中生成每n行循环递增后重置的新列
在Pandas DataFrame中创建循环重复的序列列
这里提供两种简洁高效的方法来实现你需要的循环序列列:
方法一:纯Pandas索引计算(最简洁)
利用索引的数学运算直接生成,无需额外依赖:
import pandas as pd # 示例DataFrame df = pd.DataFrame({'原数据': range(12)}) n = 3 # 每个数值保持不变的行数 m = 3 # 循环的最大值(达到后从1重新开始) # 生成目标列 df['new_col'] = ((df.index // n) % m) + 1
逻辑解释
df.index // n:将索引每n个归为一组,得到分组编号[0,0,0,1,1,1,2,2,2,3,3,3...]% m:对分组编号取模,让编号在0到m-1之间循环,得到[0,0,0,1,1,1,2,2,2,0,0,0...]+1:将结果偏移为从1开始的序列,即你需要的[1,1,1,2,2,2,3,3,3,1,1,1...]
方法二:Numpy组合函数(直观易懂)
如果喜欢更直观的序列构建方式,可以用Numpy的repeat和tile函数:
import pandas as pd import numpy as np df = pd.DataFrame({'原数据': range(12)}) n = 3 m = 3 # 先生成基础重复单元:每个数值重复n次 base_seq = np.repeat(np.arange(1, m+1), n) # 重复单元足够多次以覆盖DataFrame长度,再截断到目标长度 repeat_seq = np.tile(base_seq, len(df) // len(base_seq) + 1)[:len(df)] df['new_col'] = repeat_seq
逻辑解释
np.arange(1, m+1):生成1到m的基础数值序列[1,2,3]np.repeat(..., n):将每个数值重复n次,得到单元序列[1,1,1,2,2,2,3,3,3]np.tile(..., ...):重复这个单元序列足够多的次数,确保长度覆盖整个DataFrame[:len(df)]:截断序列到和DataFrame一致的长度
示例输出
运行任意一种方法后,DataFrame的结果如下:
原数据 new_col 0 0 1 1 1 1 2 2 1 3 3 2 4 4 2 5 5 2 6 6 3 7 7 3 8 8 3 9 9 1 10 10 1 11 11 1
注意事项
如果你的DataFrame索引不是从0开始的连续整数,可替换df.index为np.arange(len(df)),确保分组逻辑正确。
内容的提问来源于stack exchange,提问作者question12
相关产品推荐
相关产品推荐

