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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:18:22