I have a dataframe (df
):
JavaScript
x
6
1
index time val1 time2 val2
2
0 0.2 1 0.1 2
3
1 0.3 3 0.4 2
4
2 0.4 1 0.8 9
5
3 1.0 2
6
I need to merge the time
columns, sort them, then fill the missing values in a “downwards” manner.
The expected output is like so:
JavaScript
1
8
1
index time val1 val2
2
0 0.1 - 2
3
1 0.2 1 2
4
2 0.3 3 2
5
3 0.4 1 2
6
4 0.8 1 9
7
5 1.0 1 2
8
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
:
JavaScript
1
15
15
1
df1 = (pd.wide_to_long(df.rename(columns={'time':'time1'}).reset_index(),
2
'time', i='index', j='t')
3
.sort_values(['time','val2'])
4
.drop_duplicates('time')
5
.dropna(subset=['time'])
6
.reset_index(drop=True))
7
print (df1)
8
val1 val2 time
9
0 1.0 2 0.1
10
1 1.0 2 0.2
11
2 3.0 2 0.3
12
3 3.0 2 0.4
13
4 1.0 9 0.8
14
5 NaN 2 1.0
15