Это не так прямо, но я нашел его очень интуитивным (использование карты для создания новых столбцов из другого столбца) и может быть применено ко многим другим случаям:
gb = df.groupby('A').sum()['values']
def getvalue(x):
return gb[x]
df['sum'] = df['A'].map(getvalue)
df