Я не уверен, чего именно вы хотите достичь:
import pandas as pd
from datetime import date
df=pd.DataFrame({"Date":[date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2)],
"CatID":[1,1,1,None,2,2,2,2],
"ShopID":[1,1,1,1,2,2,2,2]
})
df['CatID_copy'] = df['CatID']
df['CatID'] = df['CatID'].bfill()
df.loc[df['CatID_copy'].isna(), 'CatID'] = df['CatID_copy']
df.drop(columns='CatID_copy', inplace=True)
Вывод:
Date CatID ShopID
0 2019-10-01 1.0 1
1 2019-10-02 1.0 1
2 2019-10-01 1.0 1
3 2019-10-02 NaN 1
4 2019-10-01 2.0 2
5 2019-10-02 2.0 2
6 2019-10-01 2.0 2
7 2019-10-02 2.0 2
Если что-то другое, пожалуйста, приложите ожидаемый вывод.