Hướng dẫn dùng pd melt python
IIUC, bạn có thể sử dụng Một chút của một ví dụ vô nghĩa, nhưng:
Một cách tiếp cận thay thế không sử dụng chức năng dành riêng cho gấu trúc sẽ là sử dụng các bộ:
4 hữu ích 0 bình luận chia sẻ IIUC, bạn có thể sử dụng Một chút của một ví dụ vô nghĩa, nhưng:
Một cách tiếp cận thay thế không sử dụng chức năng dành riêng cho gấu trúc sẽ là sử dụng các bộ:
4 hữu ích 0 bình luận chia sẻ Bài học gồm có: + melting dataframe + pivot table Melting Cho hai dạng biểu diễn dữ liệu sau:
Dạng 1 có thể chuyển qua dạng 2 thông qua pivot() và reset_index() như đã học ở bài trước. Cụ thể như sau:
Câu hỏi đặt ra là: làm thế nào để chuyển đổi dữ liệu từ dạng 2 về dạng 1? Pandas đã cung cấp phương thức để làm việc này (ta gọi đó là unpivot), đó là: pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None). Chức năng này rất hữu ích để chuyển một dataframe vào một định dạng mà một hoặc nhiều cột là các biến số định danh (id_vars), trong khi tất cả các cột khác, được coi là các biến đo được (value_vars), được chuyển đổi từ cột qua hàng (unpivoted), chỉ để lại hai không định danh cột, 'variable' và 'value'. Ví dụ sau sẽ chuyển mọi cột thành hàng.
Tuy nhiên ta thấy rằng ví dụ trên không thể đưa dạng 2 về dạng 1. Ta có thể giải quyết vấn đề này qua cách sau sử dụng id_var = ‘year’ để không chuyển cột ‘year’ thành hàng và đặt tên cho hai cột không định danh tương ứng là var_name=’product’ và value_name = ‘turnover’.
Pivot Table Trong phần này các bạn cần download file. Và tạo dataframe như sau:
Chúng ta đã học ở các phần trước pivot và melt như là tool để reshape dữ liệu bảng. Tuy nhiên pivot() không phải lúc nào cũng làm được. Cùng xem xét ví dụ phía trên: có khá nhiều dòng là kết hợp giữa “Manager” và “Rep” và mong muốn của chúng ta là muốn tổng kết giá thành ‘price’ cho sự kết hợp giữa “Manager” và “Rep”. Nếu ta dùng pivot() thì sẽ không thể làm việc được với untidy data như trên.
Lỗi bên trên là do pivot yêu cầu cặp (index, columns) phải là unique gắn với một value trong bảng mới. Và đó là lí do ra đời của pivot_table() nó giải quyết nhiều values cho mỗi cặp (index, columns) sử dụng một reduction thường thì reduction là giá trị trung bình (average). Chúng ta có thể sử dụng các reduction khác thông qua từ khóa aggfunc, ví dụ, aggfunc=’sum’.
Đôi khi khá là hữu ích khi ta muốn biết tổng của tất cả các kết hợp qua từ khóa margins=True như ví dụ sau:
Tham khảo dữ liệu tại http://pbpython.com/pandas-pivot-table-explained.html Chi tiết hơn về phương thức pivot_table(), các bạn có thể xem thêm tại web https://pandas.pydata.org/pandas-docs/stable/generated/pandas.pivot_table.html Lưu ý: Những giá trị được gán vào id_vars không được giữ vị trí là index trong DataFrame đầu vào. Cần reset_index() trước khi sử dụng pivot_table(). Kết Luận Trong bài này chúng tôi tiếp tục giới thiệu thêm hai phương pháp nữa trong pandas hỗ trợ rearranging và reshaping dữ liệu. Trước tiên phải kể đến là pd.melt() được xem như một phương thức “Unpivot” cho phép chúng ta chuyển một DataFrame từ wide format to long format mang ý nghĩa tương tự như .stack(), bên cạnh đó nó còn hỗ trợ tùy chọn biến số định danh. Nếu như .pivot() mang một yếu điểm là nó yêu cầu cặp (index, columns) phải là duy nhất gắn với một value trong bảng ( hay gọi là tidy data) thì .pivot_table() ra đời để giải quyết yếu điểm trên qua việc kết hợp với một phương thức reduction qua đối số aggfunc. |