Заполнить значения NaN методом bfill, в группировке

Есть таблица:

user_id transact_id
1 NaN
1 NaN
1 1568
1 NaN
1 NaN
1 1589
1 NaN
1 NaN
1 NaN
2 NaN
2 NaN
2 1755

Хочу получить заполнение таким образом:

user_id transact_id transact_bfill
1 NaN 1568
1 NaN 1568
1 1568 1568
1 NaN 1589
1 NaN 1589
1 1589 1589
1 NaN NaN
1 NaN NaN
1 NaN NaN
2 NaN 1755
2 NaN 1755
2 1755 1755

Если просто применить метод bfill, то он для 3-х последних строк user_id=1 заполнит 1755, а нужно чтобы осталось NaN, т.к для этого пользователя нет значений для заполнения, т.е должна быть группировка по user_id. Может есть какие-то другие варианты.

df = pd.DataFrame([[1, np.nan], [1, np.nan], [1, 1568], [1, np.nan], [1, np.nan], [1, 1589], [1, np.nan], [1, np.nan], [1, np.nan], [2, np.nan], [2, np.nan], [2, 1755]], columns=['user_id', 'transact_id'])

Ответы (1 шт):

Автор решения: Алексей Р

Воспользуйтесь groupby

df['transact_bfill'] = df.groupby('user_id').bfill()
print(df)
    user_id  transact_id  transact_bfill
0         1          NaN          1568.0
1         1          NaN          1568.0
2         1       1568.0          1568.0
3         1          NaN          1589.0
4         1          NaN          1589.0
5         1       1589.0          1589.0
6         1          NaN             NaN
7         1          NaN             NaN
8         1          NaN             NaN
9         2          NaN          1755.0
10        2          NaN          1755.0
11        2       1755.0          1755.0
→ Ссылка