2015-01-30 23 views
25

Giả sử tôi có một cột như vậy:Làm cách nào để tổng hợp các giá trị trong cột khớp với một điều kiện nhất định bằng cách sử dụng gấu trúc?

a b 
1 5 
1 7 
2 3 
1 3 
2 5 

Tôi muốn tổng hợp các giá trị cho b nơi a = 1, ví dụ. Điều này sẽ cho tôi 5 + 7 + 3 = 15.

Làm cách nào để thực hiện điều này trong gấu trúc?

+2

sử dụng nhóm theo chức năng trong gấu trúc để thực hiện tác vụ này –

Trả lời

27

Khá phổ biến khi sử dụng lập chỉ mục boolean cho loại tác vụ này. Với phương pháp này, bạn tìm ra cột a bằng 1 và sau đó tổng hợp các hàng tương ứng của cột b. Bạn có thể sử dụng loc để xử lý việc lập chỉ mục:

>>> df.loc[df['a'] == 1, 'b'].sum() 
15 

Các cách tiếp cận khác là sử dụng groupby chia dataframe thành nhiều phần theo giá trị trong cột a. Sau đó bạn có thể tóm tắt từng phần và kéo ra giá trị mà 1 của bổ sung lên đến:

>>> df.groupby('a')['b'].sum()[1] 
15 

Cách tiếp cận groupby là chậm hơn nhiều so với sử dụng lập chỉ mục boolean, nhưng rất hữu ích nếu bạn muốn kiểm tra các khoản tiền cho các giá trị khác trong cột a.

+0

Phần '.b' là gì? Bạn lập chỉ mục các cột như thế nào? – adijo

+0

Bạn có thể truy cập cột 'a' của DataFrame bằng cách viết' df ['a'] 'hoặc' df.a'. Cách thứ hai thuận tiện nhưng không hoạt động tốt nếu bạn có tên cột có nhiều từ như "id người" hoặc nếu tên cột trùng với phương thức DataFrame như "where" hoặc "sum". –

+0

Ok cảm ơn, tôi cũng làm cách nào để chuyển đổi tất cả các giá trị trong cột thành 'int' bằng cách cho phép tôi tổng hợp chúng? Tôi đã sử dụng 'map' để chuyển đổi tất cả chúng thành' ints' nhưng tôi nghĩ có thể có một chức năng sẵn có trong gấu trúc để làm điều này hiệu quả hơn. – adijo

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