Could we have a bit more information, please?
I notice in your end result t0
is still NA, why is that? Do you still want to keep some values as NaN?
In the example, t3
was 0
originally, and in the result it was still 0
, which made sense within the sequence. But what if it was already populated, and not with 0
but another value like 5
? Would you want to keep the 5
or assign the 0
from the sequence in that position? And if you kept the 5
, would then t4
be 0
?
Here's a few solutions just in case:
To fill in the NaN values with a sequence (skipping populated values)
#!/usr/bin/env python
import pandas as pd
df = pd.DataFrame([
{'Time': 't0', 'Number': None},
{'Time': 't1', 'Number': None},
{'Time': 't2', 'Number': None},
{'Time': 't3', 'Number': 0},
{'Time': 't4', 'Number': None},
{'Time': 't5', 'Number': None},
])
len_null = df['Number'].isna().sum()
starting_number = -2
df.loc[df['Number'].isna(), 'Number'] = list(range(starting_number, len_null-abs(starting_number)))
print(df)
Will give you this:
Time Number
0 t0 -2.0
1 t1 -1.0
2 t2 0.0
3 t3 0.0
4 t4 1.0
5 t5 2.0
To fill in the entire column with a sequence (overwriting populated values)
#!/usr/bin/env python
import pandas as pd
df = pd.DataFrame([
{'Time': 't0', 'Number': None},
{'Time': 't1', 'Number': None},
{'Time': 't2', 'Number': None},
{'Time': 't3', 'Number': 0},
{'Time': 't4', 'Number': None},
{'Time': 't5', 'Number': None},
])
starting_number = -2
df['Number'] = list(range(starting_number, len(df)-abs(starting_number)))
print(df)
Will give you:
Time Number
0 t0 -2
1 t1 -1
2 t2 0
3 t3 1
4 t4 2
5 t5 3
To fill in the NAN values with a sequence (skipping the sequence where values are populated)
#!/usr/bin/env python
import pandas as pd
df = pd.DataFrame([
{'Time': 't0', 'Number': None},
{'Time': 't1', 'Number': None},
{'Time': 't2', 'Number': None},
{'Time': 't3', 'Number': 0},
{'Time': 't4', 'Number': None},
{'Time': 't5', 'Number': None},
])
starting_number = -2
new_series = pd.Series(list(range(starting_number, len(df)-abs(starting_number))))
df['Number'] = df['Number'].fillna(new_series)
print(df)
Will give you:
Time Number
0 t0 -2.0
1 t1 -1.0
2 t2 0.0
3 t3 0.0
4 t4 2.0
5 t5 3.0
(Notice that 1
would have gone into the t3
slot, but since there was a 0
there already, it just skipped it)