Просто, чтобы объяснить, почему это происходит, вот более простая MCVE проблемы:
d = {1: "a"}
d = d[1] = "3"
TypeError: 'str' object does not support item assignment
Это происходит потому, что, как описано здесь , df = df['new_col'] = '12'
эквивалентно:
df = "3"
df['new_col'] = '12'
Теперь должно быть понятно, почему происходит ошибка. df
перезаписывается строкой до назначения 'new_col'
.