Использовать, если item_code
- столбец:
df['total'] = df.groupby(df['item_code'].replace('',np.nan).ffill())['qty'].transform('sum')
Использовать, если item_code
- уровень MultiIndex
:
df['total'] = df.groupby(level=0)['qty'].transform('sum')
При необходимости удалить повторяющиеся значения (заменить на пустое строка) возможно, но получаются смешанные значения - строки с числами, поэтому следующая обработка должна быть проблемной c:
df['total'] = df['total'].mask(df.index.get_level_values('item_code').duplicated(), '')