Вы можете скопировать строку, добавить 0,5 к индексу копии, затем добавить копию к фрейму данных, отсортировать и сбросить индексы следующим образом:
row_copy = df2.iloc[[row_index]]
row_copy.rename(index={row_index: row_index + 0.5}, inplace=True)
df2 = df2.append(row_copy, ignore_index=False)
df2.sort_index().reset_index(drop=True)
В качестве альтернативы, вы можете разбить ваш фрейм данных на два и используйте concat для вставки дублирующейся строки:
line = df2.iloc[[row_index]]
df2 = concat([df.iloc[:row_index], line, df.iloc[row_index:]]).reset_index(drop=True)