有没有办法创建一个循环,将值填充到一列中接下来的 5 行空行?

Is there any way to create a loop which fills down values to the next empty 5 rows in a column?

我的 df 中有一个 dtype: object 列,我想将值填充到空单元格中。 None 我的尝试为我完成了工作,包括 df.fillna(method='ffill', inplace=True)

所以我所做的是将该列转换为一个列表,创建一个列表,其中包含我要在我的列中填写的值,然后 运行 以下循环:

a = ['nan', 'nan', 'nan', 'Loaded volume_Road', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'Loaded volume_Rail', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan']
Name = ["Loaded volume_Road", "Loaded volume_Rail"]

for x in range(len(a)):
    if a[x] not in Name:
        a[x] = a[x-1]
print(a)     

#output:
a = ['nan', 'nan', 'nan', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail']

然后我将列表值插入到我的列中,这基本上完成了工作。

但后来我意识到我只需要为接下来的 5 行填写如下值:

#current output:
a = ['nan', 'nan', 'nan', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail']

#desired output:
a = ['nan', 'nan', 'nan', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan']

你们有什么技巧可以实现 #desired output 吗?我运行没主意:-(

非常感谢!!!

试试这个

indexes = [i for i in range(len(a)) if a[i] != 'nan']

for idx in indexes:
    a[idx: idx + 6] = [a[idx]] * 6
print(a)

输出:

['nan', 'nan', 'nan', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'Loaded volume_Road', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'Loaded volume_Rail', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan']