Хотя я согласен с ответом @ ShadowRanger, дешевым взломом может воспользоваться np.nan_to_num , который заменяет infs большими конечными числами, которые затем передадут вам inf * 0 = 0.
Чтобы преобразовать ненужные оставшиеся высокие конечные числа обратно в inf (учитывая некоторые другие операции помимо вашего вопроса), вы можете использовать несколько больших чисел на что угодно> 1, а затем разделить на одну и ту же сумму (чтобы не влиять другие номера). Например:
In [1]: np.nan_to_num(np.inf)
Out[1]: 1.7976931348623157e+308
In [2]: np.nan_to_num(np.inf)*1.1
RuntimeWarning: overflow encountered in double_scalars
Out[2]: inf
In [3]: np.nan_to_num(np.inf)*1.1/1.1
RuntimeWarning: overflow encountered in double_scalars
Out[3]: inf
Перед потоком downvotes это явно не лучшая практика и потенциально может иметь побочные эффекты в зависимости от вашего варианта использования, но просто подумал, что я выбрал бы альтернативу.
Кроме того, альтернативный способ:
data = data.groupby(['Cat1'], as_index = False).apply(lambda group: group.ffill())
Спасибо, @Jezrael за идею решения :))