Заполнить значения 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