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 )
Я пробовал группировать по Имени и Фруктам, но как узнать общее количество фруктов.
Ответы
Ответ 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