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

2024-09-30 16:39:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

   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开始。 我该怎么做


Tags: 数据示例newyear编号storenumberovious
3条回答

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

baselist = [1, 2, 3]
size = df.size[0]
df['New'] = (baselist * (size // len(baselist) + 1))[size]

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

from itertools import cycle

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

import pandas as pd 
import itertools 

df = pd.DataFrame(
    data = [
        (1000, 2000),
        (1000, 2001),
        (1000, 2002),
        (1001, 2000),
        (1001, 2001),
        (1001, 2002),
    ],
    columns=['StoreNumber', 'Year']
)

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

print(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

您可以使用^{}

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

相关问题 更多 >