Итак, я использую панды и пытаюсь добавить новый столбец под названием «Всего», где это сумма всех номеров автомобилей за этот год.
Из этого:
type year number
Private cars 2005 401638
Motorcycles 2005 138588
Off peak cars 2005 12947
Motorcycles 2005 846
Примерно так:
type year number Total
Private cars 2005 401638 554019
Motorcycles 2005 138588
Off peak cars 2005 12947
Motorcycles 2005 846
Использование GroupBy
+ transform
с sum
:
df['Year_Total'] = df.groupby('year')['number'].transform('sum')
Обратите внимание, что это даст вам годовой итог для каждой строки. Если вы хотите «вычеркнуть» итоги для определенных строк, вы должны точно указать логику для этого.
Используйте 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
Это дает аналогичный фрейм данных:
total = df['numer'].sum()
df['Total'] = np.ones_line(df['number'].values) * total
делать это на двух строках не нужно - df['Total'] = df['numer'].sum()
должен иметь такой же эффект
Ваш вывод не имеет смысла. Почему Сумма находится в строке Частные автомобили?