2016-10-07 28 views
19

Tôi đang sử dụng khung dữ liệu này:Pandas nhóm-by và tổng

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 

tôi muốn tổng hợp này theo tên và sau đó nhờ những trái để có được một tổng số trái cây cho mỗi tên.

Bob,Apples,16 (for example) 

Tôi đã thử nhóm theo Tên và Trái cây nhưng làm cách nào để có được tổng số quả.

Trả lời

24

sử dụng phương pháp

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 
+1

Với thứ tự trong danh sách đối số 'nhóm của bạn', liệu dữ liệu có được nhóm lần đầu vào tên và sau đó được nhóm theo trái cây cho từng người bán không? –

+0

@p_sutherland bạn đúng, đã sửa chữa. –

+2

Làm thế nào gấu trúc có thể biết rằng tôi muốn tổng hợp col có tên là 'Số'? – Kingname

3

sum() Bạn có thể sử dụng groupbysum:

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 
6

Cả hai câu trả lời khác thực hiện những gì bạn muốn.

Bạn có thể sử dụng chức năng pivot để sắp xếp dữ liệu trong một bảng đẹp

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 
6

Ngoài ra bạn có thể sử dụng agg chức năng,

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

Bạn có thể chọn cột khác nhau để tổng hợp số .

Các vấn đề liên quan