Заполните отсутствующие данные 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 для первого значения или набора первых значений они также заполняются.