- Сначала отсортируйте значения так, чтобы Nan был последним
- Затем сгруппируйте по столбцам, которые я использовал
(id,state)
, чтобы заполнить zone
df = pd.DataFrame(data={"id":["x","x","x","x"],
"state":["AP","Delhi","AP","Delhi"],
"zone":["sount","north",np.nan,np.nan]})
res = df.sort_values(['id','state','zone'])
res = df.groupby(['id','state'],as_index=False)['zone'].ffill()
print(res)
id state zone
0 x AP sount
1 x Delhi north
2 x AP sount
3 x Delhi north
- 2-й ответ, если вы хотите использовать только состояние в качестве группы
df['zone'] = df.groupby(['state'],as_index=False)['zone'].transform(lambda x:x.ffill())
print(df)
id state zone
0 x AP sount
1 x Delhi north
2 x AP sount
3 x Delhi north