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

Я имею дело с панд кадров данных, как это:

   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 'предыдущим non-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

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

2 ответов


вы можете выполнить 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

df
   id   val
0   1   23.0
1   1   NaN
2   1   NaN
3   2   NaN
4   2   34.0
5   2   NaN
6   3   2.0
7   3   NaN
8   3   NaN

df.sort_values(['id','val']).groupby('id').ffill()

    id  val
0   1   23.0
1   1   23.0
2   1   23.0
4   2   34.0
3   2   34.0
5   2   34.0
6   3   2.0
7   3   2.0
8   3   2.0

используйте sort_values, groupby и ffill, чтобы, если у вас есть Nan value для первого значения или набора первых значений они также заполняются.