Используйте GroupBy.transform
, а затем при необходимости замените дублированные значения:
df['Total'] = df.groupby('year')['number'].transform('sum')
print (df)
type year number Total
0 Private cars 2005 1 3
1 Motorcycles 2005 2 3
2 Off peak cars 2006 5 20
3 Motorcycles 2006 7 20
4 Motorcycles1 2006 8 20
df.loc[df['year'].duplicated(), 'Total'] = np.nan
print (df)
type year number Total
0 Private cars 2005 1 3.0
1 Motorcycles 2005 2 NaN
2 Off peak cars 2006 5 20.0
3 Motorcycles 2006 7 NaN
4 Motorcycles1 2006 8 NaN
Замена на пустые значения возможна, но не рекомендуется, поскольку получить смешанные значения числовыми со строками и некоторымиСбой функции:
df.loc[df['year'].duplicated(), 'Total'] = ''
print (df)
type year number Total
0 Private cars 2005 1 3
1 Motorcycles 2005 2
2 Off peak cars 2006 5 20
3 Motorcycles 2006 7
4 Motorcycles1 2006 8