I have a dataframe (df):
index time val1 time2 val2 0 0.2 1 0.1 2 1 0.3 3 0.4 2 2 0.4 1 0.8 9 3 1.0 2
I need to merge the time columns, sort them, then fill the missing values in a “downwards” manner.
The expected output is like so:
index time val1 val2 0 0.1 - 2 1 0.2 1 2 2 0.3 3 2 3 0.4 1 2 4 0.8 1 9 5 1.0 1 2
Advertisement
Answer
Use wide_to_long with some preprocessing – rename time column and convert index to column, then sorting by DataFrame.sort_values, remove dupes by DataFrame.drop_duplicates and missing values by DataFrame.dropna:
df1 = (pd.wide_to_long(df.rename(columns={'time':'time1'}).reset_index(),
'time', i='index', j='t')
.sort_values(['time','val2'])
.drop_duplicates('time')
.dropna(subset=['time'])
.reset_index(drop=True))
print (df1)
val1 val2 time
0 1.0 2 0.1
1 1.0 2 0.2
2 3.0 2 0.3
3 3.0 2 0.4
4 1.0 9 0.8
5 NaN 2 1.0