当前位置: 首页 > 知识库问答 >
问题:

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

董庆
2023-03-14

我有一个数据帧:

   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 

我不希望新行依赖于StoreNumber,这在示例中看起来很明显。我想从1开始编号,当我到达3时,再从1开始。我该怎么做呢?

共有3个答案

施锋
2023-03-14

您可以使用numpy.tile

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
葛嘉悦
2023-03-14

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

baselist = [1, 2, 3]
size = df.size[0]
df['New'] = (baselist * (size // len(baselist) + 1))[size]
潘灵均
2023-03-14

您可以使用itertools.cycle来创建一个迭代器,并使用它来生成目标序列:

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
 类似资料:
  • 问题内容: 使用标准Java库,从IPV4地址的虚线字符串表示形式()到等效整数表示形式()的最快方法是什么。 相应地,反转所述操作的最快方法是什么-从整数到字符串表示形式? 问题答案: 字符串到整数: 整数到字符串:

  • 我怎样才能把数字从1列成一个特定的数字?我想制作一个脚本,可以执行以下操作: 我不知道怎样才能做到这一点。是否有自动生成列表的特定功能,我现在正在手动键入?我试着用谷歌搜索它,但大多数答案都是关于把一个数字分开,然后列一个清单。这样地

  • 问题内容: 我需要将JSONArray对象存储为字符串,然后检索该字符串并将其转换回JSONArray。 如果我做: 我会找回同一个物体吗? 我正在尝试将JSONArray存储在SQLite数据库中。 这就是我在看的东西。http://developer.android.com/reference/org/json/JSONArray.html#toString() 问题答案: 只要它是一个有效的

  • 到目前为止,我做到了: 我的Ajax1函数返回ajax对象。我的等待函数看起来像这样: 问题是第二个ajax请求函数(Ajax2)并没有等待等待函数!编辑:我也试过: 什么也没变。从jQuery文档: 在将多个延迟对象传递给jQuery.when的情况下,该方法将从新的“master”返回promise“延迟对象,跟踪已传递的所有延迟的聚合状态。当所有延迟被解决时,该方法将立即解决其主延迟,或者当

  • 我有一个用例,需要调用UPDATE/DELETE Rest endpoint,它可能会返回关于实体被锁定以进行编辑的异常。我想等待实体解锁一段时间,否则调用force unlock endpoint并再次调用我的原始请求。这在故障保护中是可能的吗? 到目前为止我试过: 和 然而,用这种方法,我必须自己做最后一次“重试”,不能得到这个动作的结果。

  • 我正在学习爪哇,我正在通过德特尔 创建一个具有长度和宽度属性的类Rectangle,每个属性默认为1。提供计算矩形周长和面积的方法。对长度和宽度都使用set和get方法。set方法将验证长度和宽度都是大于0.0小于20.0的浮点数。编写一个程序来测试类Rectangle。 这是我创建的类: 下面是测试类或驱动类: 当我运行测试类(在IDE中)时,显示了以下警告: "不兼容的类型:从double到f