+1

Tổng hợp dữ liệu trong DataFrame

Mayfest2023

Mở đầu

Khi làm việc với dữ liệu trong DataFrame, một trong những nhiệm vụ quan trọng là tổng hợp và tóm tắt dữ liệu . Trong Python, thư viện pandas cung cấp các phương thức như mean(), median(), min(), max(), std() để tính toán các con số tổng kết dễ dàng từ DataFrame. Từ đó, giúp bạn phân tích và tận dụng dữ liệu một cách hiệu quả, đưa ra những quyết định thông minh và linh hoạt. Trong bài viết này, chúng ta sẽ tìm hiểu về cách tổng hợp dữ liệu trong DataFrame bằng cách sử dụng thư viện pandas.

Pivot Tables

Trong pandas, pivot tables là một công cụ mạnh mẽ để tổng hợp dữ liệu. Chúng cho phép chúng ta xem tổng quan về dữ liệu và tính toán các giá trị thống kê cho các nhóm khác nhau trong DataFrame. Phương thức pivot_table() trong pandas là một cách tiện lợi để thực hiện tính toán nhóm.

Trong phương thứcpivot_table() có một số tham số quan trọng cần lưu ý:

  1. values: Tham số này xác định cột trong DataFrame mà bạn muốn tính toán hoặc tổng hợp.

  2. index: Tham số này xác định cột hoặc cột được sử dụng làm chỉ mục (index) cho bảng pivot. Dữ liệu sẽ được nhóm theo giá trị trong cột này.

  3. columns: Tham số này xác định cột được sử dụng để tạo các cột mới trong bảng pivot. Dữ liệu sẽ được phân loại thành các cột dựa trên giá trị trong cột này.

  4. aggfunc: Tham số này xác định hàm tính toán được áp dụng cho các giá trị trong bảng pivot. Có thể sử dụng các hàm tính toán như sum, mean, count, min, max, v.v.

  5. fill_value: Tham số này xác định giá trị sẽ được sử dụng để thay thế các giá trị thiếu trong bảng pivot. Giá trị thiếu được xác định dựa trên các quan sát không có dữ liệu tương ứng.

  6. margins: Tham số này là một cú pháp rút gọn để tính tổng hàng và cột của nội dung bảng pivot. Khi được đặt thành True, nó sẽ thêm hàng "All" (tổng cộng) và cột "All" vào bảng pivot.

Ví dụ:
Chúng ta có một DataFrame chứa thông tin về bán hàng của một công ty với các cột như 'Product', 'Sales_Date', 'Revenue', và 'Region'. Để tính tổng doanh thu theo từng khu vực, chúng ta có thể sử dụng pivot_table() như sau:

import pandas as pd

# Tạo DataFrame
df = pd.DataFrame({
   'Product': ['A', 'B', 'A', 'B', 'A', 'B'],
   'Sales_Date': ['01/01/2023', '02/01/2023', '01/01/2023', '02/01/2023', '01/01/2023', '02/01/2023'],
   'Revenue': [1000, 2000, 1500, 2500, 1200, 1800],
   'Region': ['North', 'South', 'North', 'South', 'North', 'South']
})

# Tính tổng doanh thu theo khu vực và thay thế giá trị thiếu bằng 0
pivot_table = df.pivot_table(values='Revenue', index='Region', aggfunc='sum', fill_value=0)

# Tính tổng doanh thu theo khu vực và tính cả tổng hàng và cộttổng
pivot_table_with_margins = df.pivot_table(values='Revenue', index='Region', aggfunc='sum', margins=True)

print(pivot_table)
print(pivot_table_with_margins)

Kết quả:

            Revenue
Region            
North          3700
South          4300
            Revenue
Region            
North          3700
South          4300
All            8000

GroupBy

Ngoài pivot tables, pandas cung cấp phương thức groupby() để tổng hợp dữ liệu. Phương thức này cho phép chúng ta nhóm dữ liệu theo một hoặc nhiều cột và thực hiện các phép tính thống kê trên các nhóm này.

Cùng với groupby(), phương thức .agg() cho phép bạn áp dụng các hàm tuỳ chỉnh riêng cho một DataFrame, cũng như áp dụng các hàm cho nhiều cột của DataFrame cùng một lúc, giúp việc tổng hợp dữ liệu trở nên hiệu quả.

Ví dụ:
Chúng ta sẽ sử dụng cùng DataFrame từ ví dụ trước để tính tổng doanh thu theo khu vực bằng phương thứcgroupby() và tính tổng tích lũy (cumulative sum) và giá trị lớn nhất tích lũy (cumulative max) của doanh thu hàng tuần:

import pandas as pd

# Tạo DataFrame
df = pd.DataFrame({
   'Product': ['A', 'B', 'A', 'B', 'A', 'B'],
   'Sales_Date': ['01/01/2023', '02/01/2023', '01/01/2023', '02/01/2023', '01/01/2023', '02/01/2023'],
   'Revenue': [1000, 2000, 1500, 2500, 1200, 1800],
   'Region': ['North', 'South', 'North', 'South', 'North', 'South']
})

# Tính tổng doanh thu theo khu vực
grouped_data = df.groupby('Region')['Revenue'].sum()

# Tính tổng tích lũy và giá trị lớn nhất tích lũy của doanh thu hàng tuần
cumulative_sum_max = df.groupby('Product')['Revenue'].agg(['cumsum', 'cummax'])

print(grouped_data)
print(cumulative_sum_max)

Kết quả:

Region
North    3700
South    4300
Name: Revenue, dtype: int64
   cumsum  cummax
0    1000    1000
1    2000    2000
2    2500    1500
3    4500    2500
4    3700    1500
5    6300    2500

Đếm và Xóa các phần tử trùng lặp (duplicate)

Đếm và loại bỏ các phần tử trùng lặp là một kỹ năng quan trọng để đảm bảo có số lượng chính xác, vì thường chúng ta không muốn đếm cùng một điều nhiều lần. Trong ví dụ này, chúng ta sẽ tạo ra các DataFrame mới bằng cách sử dụng các giá trị duy nhất từ bảng bán hàng.

Để thực hiện điều này, chúng ta có thể sử dụng phương thức unique() để lấy danh sách các giá trị duy nhất từ một cột trong DataFrame. Sau đó, chúng ta có thể sử dụng danh sách này để tạo DataFrame mới chỉ chứa các giá trị duy nhất.

Dưới đây là ví dụ về việc tạo các DataFrame mới bằng cách sử dụng các giá trị duy nhất từ cột 'Product' trong bảng bán hàng:

import pandas as pd

# Tạo DataFrame
df = pd.DataFrame({
   'Product': ['A', 'B', 'A', 'B', 'A', 'B'],
   'Sales_Date': ['01/01/2023', '02/01/2023', '01/01/2023', '02/01/2023', '01/01/2023', '02/01/2023'],
   'Revenue': [1000, 2000, 1500, 2500, 1200, 1800],
   'Region': ['North', 'South', 'North', 'South', 'North', 'South']
})

# Đếm số lượng giá trị duy nhất trong cột 'Sản phẩm'
unique_products = df['Product'].nunique()

# Tạo DataFrame mới chỉ chứa các hàng không trùng lặp dựa trên cột 'Ngày bán'
unique_sales = df.drop_duplicates(subset='Sales_Date')

print(unique_products)
print(unique_sales)

Kết quả:

2
   Product  Sales_Date    Revenue  Region
0        A  01/01/2023       1000   North
1        B  02/01/2023       2000   South

Lời kết

Trong bài viết này, chúng ta đã tìm hiểu về cách tổng hợp dữ liệu trong DataFrame bằng cách sử dụng pivot tables, groupby() và các phương pháp khác trong thư viện pandas. Nhờ vào những công cụ này, chúng ta có thể dễ dàng thực hiện các phép tính nhóm, tính toán tùy chỉnh và xử lý dữ liệu trùng lặp để có cái nhìn tổng quan và chính xác về dữ liệu của mình, từ đó đưa ra những quyết định thông minh và đúng đắn.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí