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