pandas 我想创建一个列表,其中每个元素更新8,但每个元素更新11,它运行到一个dataframe的长度?

0g0grzrc  于 2023-06-28  发布在  其他
关注(0)|答案(2)|浏览(85)

基本上是标题。我需要提取以下行(3,11,19,27,38,46,54..),直到dataframe的长度,在我的情况下是10000。我尝试创建一个循环,但它似乎没有更新的第6个元素。

def return_value(length):
    if length%4==0:
        return 11
    else:
        return 8

list = [3]

for i in range(3,len(df),8):
    index = return_value(len(list)) + i
    list.append(index)

list
unhi4e5o

unhi4e5o1#

对于使用numpy的向量方法:

import numpy as np

k = 4
start = 3
stop = 1000

a = np.repeat([8, 11], [k-1, 1])
# [8, 8, 8, 11]

n = np.ceil((stop-start)/a.sum())
# 29

out = start+np.r_[0, np.tile(a, int(n))].cumsum()

out = out[out<stop]

输出:

[3, 11, 19, 27, 38, 46, 54, 62, 73, 81, 89, 97, 108, 116, 124, 132, 143, 151, 159, 167, 178, 186, 194, 202, 213, 221, 229, 237, 248, 256, 264, 272, 283, 291, 299, 307, 318, 326, 334, 342, 353, 361, 369, 377, 388, 396, 404, 412, 423, 431, 439, 447, 458, 466, 474, 482, 493, 501, 509, 517, 528, 536, 544, 552, 563, 571, 579, 587, 598, 606, 614, 622, 633, 641, 649, 657, 668, 676, 684, 692, 703, 711, 719, 727, 738, 746, 754, 762, 773, 781, 789, 797, 808, 816, 824, 832, 843, 851, 859, 867, 878, 886, 894, 902, 913, 921, 929, 937, 948, 956, 964, 972, 983, 991, 999]

使用Python生成器的替代方法:

def gen(start, stop, k=4):
    assert start <= stop
    i = 1
    yield start
    while True:
        if i < k:
            start += 8
            i += 1
        else:
            start += 11
            i = 1
        if start > stop:
            break
        yield start
        
out = list(gen(3, 1000))
yc0p9oo0

yc0p9oo02#

您可以执行以下操作:

import pandas as pd
el = 3
elements = []
df = pd.DataFrame({"data": list(range(100))})
for i in range(len(df)):
  if i == 0:
    elements.append(el)
  else:
    if i%4 == 0:
      el = el + 11
    else:
      el = el + 8
    elements.append(el)
elements[:10]

请注意,for循环正在跳过dataframe中的元素。

相关问题