Заполните данные pandas отсутствующим значением, сгруппированным по ключу

Я имею дело с pandas DataFrames следующим образом:

   id    x
0   1   10
1   1   20
2   2  100
3   2  200
4   1  NaN
5   2  NaN
6   1  300
7   1  NaN

Я хотел бы заменить каждый NAN 'x' предыдущим не-NAN 'x' из строки с тем же значением "id":

   id    x
0   1   10
1   1   20
2   2  100
3   2  200
4   1   20
5   2  200
6   1  300
7   1  300

Есть ли какой-нибудь пятнистый способ сделать это без ручного перебора строк?

Ответ 1

Вы можете выполнить операцию groupby/forward-fill в каждой группе:

import numpy as np
import pandas as pd

df = pd.DataFrame({'id': [1,1,2,2,1,2,1,1], 'x':[10,20,100,200,np.nan,np.nan,300,np.nan]})
df['x'] = df.groupby(['id'])['x'].ffill()
print(df)

дает

   id      x
0   1   10.0
1   1   20.0
2   2  100.0
3   2  200.0
4   1   20.0
5   2  200.0
6   1  300.0
7   1  300.0