Описание
Исходный файл
Желаемый результат:






Вы можете заменить original_id на change_request_id, если оно не равно нулю (с помощью fillna ), а затем получить последнее значение для каждой группы с помощью groupby.last:
out = (df.assign(original_id=df['change_request_id'].fillna(df['original_id']))
.groupby('original_id', as_index=False).last()
.drop(columns='change_request_id')
)
Выход:
original_id a b c d
0 1.0 12.0 30.0 30.0 40.0
1 2.0 2500.0 700.0 800.0 800.0
2 6.0 16.0 17.0 19.0 20.0