【问题标题】:Create a pandas column counter that successively counts 4 lines and 6 lines创建一个连续计数4行和6行的pandas列计数器
【发布时间】:2021-09-07 19:03:21
【问题描述】:

我有一个包含多列的 pandas 数据框,我想创建一个连续计数 4 行和 6 行的计数器。 我希望它看起来像下面的数据框:

index counter
0 1
1 1
2 1
3 1
4 2
5 2
6 2
7 2
8 2
9 2
10 3
11 3
12 3
13 3

如您所见,counter 列中的前 4 个值是 1,然后接下来的 6 个值是 2,然后再接下来的 4 个值是 3。

【问题讨论】:

  • 4行和6行的定义是什么?你的问题很模棱两可。我所看到的只有 4 行,值为 1,然后是 6 行,值为 2,然后是 4 行,值为 3。不知道这与输入数据帧有何关系
  • 对不起,我添加了一个索引列以使其更清晰。例如,如果我有一个数据框,我想从索引创建一个计数器,当它读取 4 行时递增 1,然后在读取 6 行时再次递增 1,然后在读取 4 行时递增 1(然后6行再次加1)等等,直到我的数据框的最后一行。这更清楚了吗?

标签: python pandas counter


【解决方案1】:

您的问题在编辑后有点清楚,您可以创建一个空列表和一个计数器变量,然后迭代行数范围,将其递增 10 即(4+6),然后在每次迭代时,创建所需的长度为 4 和 6 的列表,带有 counter 和 counter+1,将其添加到结果列表中。 最后从结果列表中取出切片的第一个 df.shape[0] 值(因为它的值可能比 df.shape[0] 多一些),并将其分配给新列 df['counter']。

result = []
counter = 1
for i in range(0, df.shape[0], 10):
    result += [counter]*4
    counter += 1
    result += [counter]*6
    counter += 1

df['counter'] = result[:df.shape[0]]
    
# result [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4]

输出:

    index  counter
0       0        1
1       1        1
2       2        1
3       3        1
4       4        2
5       5        2
6       6        2
7       7        2
8       8        2
9       9        2
10     10        3
11     11        3
12     12        3
13     13        3

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 2021-04-07
    • 2013-11-28
    • 2015-01-20
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2019-03-16
    相关资源
    最近更新 更多