
Hệ thống quản trị đào tạo trực tuyến
Trong phân tích dữ liệu, chúng ta thường cần:
Nhóm dữ liệu theo một tiêu chí
Sau đó tính toán thống kê trên từng nhóm.
Ví dụ dataset:
| Product | Region | Revenue |
|---|---|---|
| A | North | 1000 |
| B | South | 2000 |
| A | North | 1500 |
| B | South | 1800 |
Chúng ta có thể tính:
Tổng doanh thu theo Region
Tổng doanh thu theo Product
Trong Pandas, sử dụng:
df.groupby()
Ví dụ:
import pandas as pd
df = pd.read_csv("sales.csv")
Ví dụ nhóm theo Region
df.groupby("Region")
df.groupby("Region")["Revenue"].sum()
Ví dụ kết quả:
| Region | Revenue |
|---|---|
| North | 4500 |
| South | 3800 |
Sau khi nhóm dữ liệu, có thể áp dụng các hàm thống kê.
df.groupby("Region")["Revenue"].sum()
df.groupby("Region")["Revenue"].count()
df.groupby("Region")["Revenue"].mean()
df.groupby("Region")["Revenue"].max()
df.groupby("Region")["Revenue"].min()
Có thể nhóm theo nhiều cột cùng lúc.
Ví dụ:
df.groupby(["Region","Product"])["Revenue"].sum()
Ví dụ kết quả:
| Region | Product | Revenue |
|---|---|---|
| North | A | 2500 |
| North | B | 2000 |
| South | A | 1200 |
| South | B | 2600 |
Hàm agg() cho phép tính nhiều thống kê cùng lúc.
Ví dụ:
df.groupby("Region")["Revenue"].agg(["sum","mean","max"])
Ví dụ kết quả:
| Region | sum | mean | max |
|---|---|---|---|
| North | 4500 | 1500 | 2000 |
| South | 3800 | 1266 | 1800 |
Pivot Table giúp tổng hợp dữ liệu theo nhiều chiều.
Cú pháp:
pd.pivot_table()
pd.pivot_table(df,
values="Revenue",
index="Region",
columns="Product",
aggfunc="sum")
Ví dụ kết quả:
| Region | A | B |
|---|---|---|
| North | 2500 | 2000 |
| South | 1200 | 2600 |
Groupby hoạt động theo nguyên tắc:
Chia dữ liệu thành các nhóm.
Áp dụng hàm tính toán trên từng nhóm.
Kết hợp kết quả lại thành bảng mới.
Groupby thường được dùng để:
Phân tích doanh thu theo khu vực
Phân tích doanh thu theo sản phẩm
Phân tích doanh số theo tháng
Phân tích hành vi khách hàng
import pandas as pd
df = pd.read_csv("sales.csv")
df.groupby("Region")["Revenue"].sum()
df.groupby(["Region","Product"])["Revenue"].sum()
df.groupby("Region")["Revenue"].agg(["sum","mean","max"])
pd.pivot_table(df,
values="Revenue",
index="Region",
columns="Product",
aggfunc="sum")