I have a dtype: object
column in my df
and I would like to fill down values to the empty cells. None of my attempts made the job for me including df.fillna(method='ffill', inplace=True)
.
So what I did was I converted the column into a list, created a list with values I want to fill down in my column and run the following loop:
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']
Then I inserted the list values into my column and this basically did the job.
However later I realised that I need only to fill down value for the next 5 rows as follows:
#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']
Do you have guys any tips how to achieve the #desired output
? I run out of ideas :-(
Many thanks!!!
Try this
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)
Output:
['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']