Reputation: 65
I have a dataframe
like below. I want to fill NaN
values between two existing values with the value in-between the NaN
values and not on either side of the existing value.
time_expanded start_time end_time name
10:30:00 NaN NaN NaN
10:30:10 10:30:10 10:30:40 11v11
10:30:20 NaN NaN NaN
10:30:30 NaN NaN NaN
10:30:40 10:30:10 10:30:40 11v11
10:30:50 NaN NaN NaN
10:31:00 10:31:00 10:31:20 zonal_game
10:31:10 NaN NaN NaN
10:31:20 10:31:00 10:31:20 zonal_game
10:31:30 NaN NaN NaN
Expected output:
time_expanded start_time end_time name
10:30:00 NaN NaN NaN
10:30:10 10:30:10 10:30:40 11v11
10:30:20 10:30:10 10:30:40 11v11
10:30:30 10:30:10 10:30:40 11v11
10:30:40 10:30:10 10:30:40 11v11
10:30:50 NaN NaN NaN
10:31:00 10:31:00 10:31:20 zonal_game
10:31:10 10:31:00 10:31:20 zonal_game
10:31:20 10:31:00 10:31:20 zonal_game
10:31:30 NaN NaN NaN
How can you achieve this?
Any help is highly appreciated!
Upvotes: 0
Views: 781
Reputation: 214927
You can use ffill
but only keep values where ffill
is equal to bfill
:
df.ffill().where(df.ffill() == df.bfill())
time_expanded start_time end_time name
0 10:30:00 NaN NaN NaN
1 10:30:10 10:30:10 10:30:40 11v11
2 10:30:20 10:30:10 10:30:40 11v11
3 10:30:30 10:30:10 10:30:40 11v11
4 10:30:40 10:30:10 10:30:40 11v11
5 10:30:50 NaN NaN NaN
6 10:31:00 10:31:00 10:31:20 zonal_game
7 10:31:10 10:31:00 10:31:20 zonal_game
8 10:31:20 10:31:00 10:31:20 zonal_game
9 10:31:30 NaN NaN NaN
Or the other way around:
df.bfill().where(df.ffill() == df.bfill())
Upvotes: 6