Лучше использовать GroupBy.transform
для возвращаемых серий с таким же размером, как у оригинала DataFrame
, поэтому после назначения все работает правильно:
df['new'] = df.groupby('group')['data'].transform('sum')
Потому что если назначитьновые значения Серии выровнены по значениям индекса.Если индекс отличается, получить NaN
s:
print (df.groupby('group')['data'].sum())
group
a 15
b 130
Name: data, dtype: int64
Различные значения индекса - получить NaN:
print (df.groupby('group')['data'].sum().index)
Index(['a', 'b'], dtype='object', name='group')
print (df.index)
RangeIndex(start=0, stop=4, step=1)
df.set_index('group', inplace=True)
print (df.groupby('group')['data'].sum())
group
a 15
b 130
Name: data, dtype: int64
Индекс можно выровнять, так как значения совпадают:
print (df.groupby('group')['data'].sum().index)
Index(['a', 'b'], dtype='object', name='group')
print (df.index)
Index(['a', 'a', 'b', 'b'], dtype='object', name='group')