Подтвердить что ты не робот

Pandas группа и сумма

Я использую этот фрейм данных:

Fruit   Date      Name  Number
Apples  10/6/2016 Bob    7
Apples  10/6/2016 Bob    8
Apples  10/6/2016 Mike   9
Apples  10/7/2016 Steve 10
Apples  10/7/2016 Bob    1
Oranges 10/7/2016 Bob    2
Oranges 10/6/2016 Tom   15
Oranges 10/6/2016 Mike  57
Oranges 10/6/2016 Bob   65
Oranges 10/7/2016 Tony   1
Grapes  10/7/2016 Bob    1
Grapes  10/7/2016 Tom   87
Grapes  10/7/2016 Bob   22
Grapes  10/7/2016 Bob   12
Grapes  10/7/2016 Tony  15

Я хочу объединить это по имени, а затем по фруктам, чтобы получить общее количество фруктов по названию.

Bob,Apples,16 ( for example )

Я пробовал группировать по Имени и Фруктам, но как узнать общее количество фруктов.

4b9b3361

Ответ 1

используйте метод sum()

df.groupby(['Fruit','Name']).sum()

Out[31]: 
               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1

Ответ 2

Также вы можете использовать функцию agg,

df.groupby(['Name', 'Fruit'])['Number'].agg('sum')

Ответ 3

Если вы хотите сохранить исходные столбцы Fruit и Name, используйте reset_index(). В противном случае Fruit и Name станут частью индекса.

df.groupby(['Fruit','Name'])['Number'].sum().reset_index()

Fruit   Name       Number
Apples  Bob        16
Apples  Mike        9
Apples  Steve      10
Grapes  Bob        35
Grapes  Tom        87
Grapes  Tony       15
Oranges Bob        67
Oranges Mike       57
Oranges Tom        15
Oranges Tony        1

Как видно из других ответов:

df.groupby(['Fruit','Name'])['Number'].sum()

               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1

Ответ 4

И другие ответы выполняют то, что вы хотите.

Функцию pivot можно использовать для упорядочивания данных в приятной таблице

df.groupby(['Fruit','Name'],as_index = False).sum().pivot('Fruit','Name').fillna(0)



Name    Bob     Mike    Steve   Tom    Tony
Fruit                   
Apples  16.0    9.0     10.0    0.0     0.0
Grapes  35.0    0.0     0.0     87.0    15.0
Oranges 67.0    57.0    0.0     15.0    1.0

Ответ 5

df.groupby(['Fruit','Name'])['Number'].sum()

Вы можете выбрать разные столбцы для суммирования чисел.

Ответ 6

Вы можете использовать groupby и sum:

df.groupby(['Name', 'Fruit']).sum()

               Number
Name  Fruit          
Bob   Apples       16
      Grapes       35
      Oranges      67
Mike  Apples        9
      Oranges      57
Steve Apples       10
Tom   Grapes       87
      Oranges      15
Tony  Grapes       15
      Oranges       1

Ответ 7

Этот ответ только для того, чтобы понять, как работает groupby и sum.

Я использую набор данных "Осадки в Индии с 1900 по 2015 год"

Мой набор данных включает в себя такие столбцы, как "подразделение" и "годовой".

Итак, здесь я хотел бы рассчитать сумму годовых осадков для каждого подразделения.

Total = Data.groupby('SUBDIVISION')['ANNUAL'].sum()
print (Total)

Таким образом, подразделение будет сгруппировано, и мы получим сумму годовых осадков на подразделение.

Ответ 8

Вы можете установить столбец groupby для index используя sum с level

df.set_index(['Fruit','Name']).sum(level=[0,1])
Out[175]: 
               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Oranges Bob        67
        Tom        15
        Mike       57
        Tony        1
Grapes  Bob        35
        Tom        87
        Tony       15