Добавление нового столбца в панды, который является общей суммой значений другого столбца - PullRequest
0 голосов
/ 10 сентября 2018

Итак, я использую панды и пытаюсь добавить новый столбец с именем «Всего», где это сумма всех номеров автомобилей за этот год.

Из этого:

    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

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Используйте 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      
0 голосов
/ 10 сентября 2018

Это дает похожий кадр данных:

total = df['numer'].sum()
df['Total'] = np.ones_line(df['number'].values) * total
0 голосов
/ 10 сентября 2018

Использование GroupBy + transform с sum:

df['Year_Total'] = df.groupby('year')['number'].transform('sum')

Обратите внимание, что это даст вам годовой итог для каждой строки. Если вы хотите «вычеркнуть» итоги по определенным строкам, вы должны точно указать логику для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...