Python 创建一列从1到3的数字,然后再次重复

Python 创建一列从1到3的数字,然后再次重复,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧: StoreNumber Year 1000 2000 1000 2001 1000 2002 1001 2000 1001 2001 1001 2002 我想添加一列,以便最终的数据帧如下所示: StoreNumber Year New 1000

我有一个数据帧:

   StoreNumber    Year  
    1000          2000  
    1000          2001  
    1000          2002  
    1001          2000  
    1001          2001  
    1001          2002  
我想添加一列,以便最终的数据帧如下所示:

StoreNumber       Year   New
    1000          2000    1
    1000          2001    2
    1000          2002    3
    1001          2000    1
    1001          2001    2
    1001          2002    3 
我不希望新行依赖于示例中看起来很ovious的StoreNumber。我想从1开始编号,当我达到3时,再从1开始。 如何操作?

您可以使用创建迭代器并使用它生成目标序列:

from itertools import cycle

num_cycle = cycle([1, 2, 3])
df['New'] = [next(num_cycle) for num in range(len(df))]

输出将是

   StoreNumber   Year  New
0         1000   2000    1
1         1000   2001    2
2         1000   2002    3
3         1001   2000    1
4         1001   2001    2
5         1001   2002    3
您可以使用:


您可以创建基本列表
[1,2,3]
,并根据需要重复多次

baselist=[1,2,3]
size=df.size[0]
df['New']=(基本列表*(大小//len(基本列表)+1))[size]

您可以使用
np.r
生成范围,然后按
3进行模除,然后添加
1
以创建每三行重复一次的计数器:

df['New'] = np.r_[:len(df)] % 3 + 1

In [507]: import numpy as np

In [508]: list_int = [1,2,3]
In [510]: df['New'] = np.tile(list_int, len(df)//len(list_int) + 1)[:len(df)]

In [511]: df
Out[511]: 
   StoreNumber  Year  New
0         1000  2000    1
1         1000  2001    2
2         1000  2002    3
3         1001  2000    1
4         1001  2001    2
5         1001  2002    3
df['New'] = np.r_[:len(df)] % 3 + 1
   StoreNumber  Year  New
0         1000  2000    1
1         1000  2001    2
2         1000  2002    3
3         1001  2000    1
4         1001  2001    2
5         1001  2002    3