Pandas là một công cụ đặc biệt cho phép chúng tôi thực hiện các thao tác dữ liệu phức tạp một cách hiệu quả và hiệu quả. Bên trong gấu trúc, chúng tôi chủ yếu xử lý tập dữ liệu ở dạng DataFrame. DataFrames là cấu trúc dữ liệu 2 chiều trong pandas. DataFrames bao gồm các hàng, cột và dữ liệu
Tính tổng tích lũy theo nhóm [cumsum] trong Pandas
Giả sử, chúng tôi có một DataFrame có nhiều cột và chúng tôi cần nhóm một số cột, sau đó chúng tôi cần tìm tổng tích lũy [cumsum] trong một nhóm
Với mục đích này, trước tiên chúng ta sẽ thực hiện groupby[] trên cột/cột và sau đó chúng ta sẽ sử dụng phương thức transform[] để truyền phương thức cumsum bên trong nó
Bất cứ khi nào chúng tôi muốn thực hiện một số thao tác trên toàn bộ DataFrame, chúng tôi sử dụng phương thức chuyển đổi. Phương thức biến đổi [] chuyển một cột duy nhất của một nhóm tại một thời điểm dưới dạng một chuỗi bên trong hàm được mô tả trong phương thức biến đổi []
Hàm được mô tả bên trong phương thức transform[] phải trả về một chuỗi có cùng độ dài với nhóm
Hãy xem xét một khung dữ liệu gấu trúc trong đó mỗi chỉ mục được biểu diễn dưới dạng một đối tượng ngày giờ ở dạng như
df.groupby[df.index.date]['col1'].sum[].cumsum[]
3Để tính tổng giá trị của một cột trong mỗi ngày, tôi đã sử dụng các cách giải quyết sau
df['col1'].resample['D'].sum[].cumsum[]
hoặc
df.groupby[df.index.date]['col1'].sum[].cumsum[]
nơi cả hai có thể trả lại đầu ra mong muốn của tôi
Tuy nhiên, tôi đã tự hỏi liệu có giải pháp nào khác mà không sử dụng hai hàm tổng hợp liên tiếp không,
df.groupby[df.index.date]['col1'].sum[].cumsum[]
4? Công thức cụ thể này nhóm các hàng theo ngày trong your_date_column và tính tổng các giá trị cho values_column trong DataFrameLưu ý rằng dt. hàm month[] trích xuất tháng từ cột ngày trong pandas
Ví dụ sau đây cho thấy cách sử dụng cú pháp này trong thực tế
Ví dụ. Cách nhóm theo tháng trong Pandas
Giả sử chúng ta có Khung dữ liệu gấu trúc sau đây hiển thị doanh số bán hàng của một số công ty vào các ngày khác nhau
import pandas as pd
#create DataFrame
df = pd.DataFrame[{'date': pd.date_range[start='1/1/2020', freq='W', periods=10],
'sales': [6, 8, 9, 11, 13, 8, 8, 15, 22, 9],
'returns': [0, 3, 2, 2, 1, 3, 2, 4, 1, 5]}]
#view DataFrame
print[df]
date sales returns
0 2020-01-05 6 0
1 2020-01-12 8 3
2 2020-01-19 9 2
3 2020-01-26 11 2
4 2020-02-02 13 1
5 2020-02-09 8 3
6 2020-02-16 8 2
7 2020-02-23 15 4
8 2020-03-01 22 1
9 2020-03-08 9 5
Có liên quan. Cách tạo phạm vi ngày trong Pandas
Chúng ta có thể sử dụng cú pháp sau để tính tổng doanh số được nhóm theo tháng
#calculate sum of sales grouped by month
df.groupby[df.date.dt.month]['sales'].sum[]
date
1 34
2 44
3 31
Name: sales, dtype: int64
Đây là cách giải thích đầu ra
- Tổng doanh số bán hàng được thực hiện trong tháng 1 [tháng 1] là 34
- Tổng doanh số thực hiện trong tháng 2 [tháng 2] là 44
- Tổng doanh số bán hàng được thực hiện trong tháng 3 [tháng 3] là 31
Chúng tôi có thể sử dụng cú pháp tương tự để tính toán bất kỳ giá trị nào chúng tôi muốn được nhóm theo giá trị tháng của cột ngày
Nếu bạn đang đọc bài viết này, chắc hẳn bạn đã nghe nói đến hoặc sử dụng Pandas. Vì vậy, tôi đang bỏ qua phần mà tôi nói về việc Pandas tuyệt vời như thế nào. 😊
Trong bài viết này, chúng ta sẽ xem xét các ví dụ chứng minh một số tính năng Pandas không được sử dụng phổ biến. Tôi không gặp chúng thường xuyên trong hành trình Pandas 3 năm của mình
Cách tốt nhất để học Pandas hoặc bất kỳ công cụ phần mềm nào khác là thực hành. Đó là những gì chúng tôi sẽ làm. Bước đầu tiên là tạo một DataFrame mẫu để làm việc
import numpy as np
import pandas as pddf = pd.DataFrame[{
"date": pd.date_range[start="2021-11-20", periods=100, freq="D"],
"class": ["A","B","C","D"] * 25,
"amount": np.random.randint[10, 100, size=100]}]df.head[]
5 hàng đầu tiên của df [hình ảnh của tác giả]
Chúng tôi có một DataFrame với 3 cột và 100 hàng. Cột ngày chứa 100 ngày liên tiếp, cột lớp chứa 4 giá trị riêng biệt được lưu trữ với kiểu dữ liệu đối tượng và cột số lượng chứa các số nguyên ngẫu nhiên trong khoảng từ 10 đến 100
1. To_period
Chúng ta sử dụng ngày với nhiều khoảng thời gian hoặc khoảng thời gian khác nhau như ngày, tuần, tháng, quý, v.v. Cái nào để sử dụng phụ thuộc vào nhiệm vụ trong tầm tay. Chẳng hạn, trong bảng điều khiển doanh thu, chúng tôi có thể muốn hiển thị doanh thu hàng tháng hoặc hàng quý
Trong Pandas, các chức năng thao tác ngày có sẵn trong bộ truy cập dt. Hàm to_period cho phép chuyển đổi một ngày thành một khoảng thời gian cụ thể. Các khoảng thời gian tôi thường sử dụng là tháng và quý
Phương thức tháng chỉ trả về tháng không hữu ích trong nhiều trường hợp như báo cáo doanh thu lịch sử. Chúng ta cần phân biệt được tháng 12 năm 2020 và tháng 12 năm 2021. Điều này có thể đạt được bằng cách sử dụng khoảng thời gian “M” với chức năng to_period. Tương tự, chúng ta có thể trích xuất thông tin quý bằng “Q”
Hãy tạo các cột mới cho năm tháng và quý
df["month"] = df["date"].dt.to_period["M"]
df["quarter"] = df["date"].dt.to_period["Q"]df.head[]
5 hàng đầu tiên của df [hình ảnh của tác giả]
Hãy cũng kiểm tra các giá trị năm tháng và quý khác nhau trong DataFrame của chúng tôi
df["month"].value_counts[]# output
2021-12 31
2022-01 31
2022-02 27
2021-11 11
Freq: M, Name: month, dtype: int64--------------------------
df["quarter"].value_counts[]# output
2022Q1 58
2021Q4 42
Freq: Q-DEC, Name: quarter, dtype: int64
2. Cumsum và nhóm
Cumsum là một chức năng Pandas rất hữu ích. Nó tính toán tổng tích lũy của các giá trị trong một cột. Đây là cách chúng ta thường sử dụng nó
df["cumulative_sum"] = df["amount"].cumsum[]df.head[]
5 hàng đầu tiên của df [hình ảnh của tác giả]
Bây giờ chúng ta có tổng tích lũy của các giá trị trong cột số tiền. Tuy nhiên, nó không đưa các lớp học vào xem xét. Trong một số trường hợp, chúng tôi có thể cần tính riêng tổng tích lũy cho các danh mục khác nhau
Rất may, Pandas làm cho nhiệm vụ này trở nên rất đơn giản. Chúng ta chỉ cần nhóm các hàng theo cột lớp rồi áp dụng hàm cumsum
________số 8Hãy xác nhận kết quả trên lớp A
df[df["class"]=="A"].head[]
[hình ảnh của tác giả]
Cột tổng tích lũy của lớp chứa các giá trị tổng tích lũy được tính riêng cho từng lớp
3. Loại dữ liệu danh mục
Chúng ta thường cần xử lý dữ liệu phân loại có số lượng giá trị có thể hạn chế và thường cố định. Trong DataFrame của chúng tôi, cột lớp là một biến phân loại có 4 giá trị riêng biệt. A B C D
Theo mặc định, kiểu dữ liệu của cột này trở thành “đối tượng”
df.groupby[df.index.date]['col1'].sum[].cumsum[]
0Pandas cũng có kiểu dữ liệu "danh mục" tiêu tốn ít bộ nhớ hơn nhiều so với kiểu dữ liệu đối tượng. Vì vậy, tốt hơn là sử dụng kiểu dữ liệu danh mục bất cứ khi nào có thể
Hãy sao chép cột lớp nhưng với kiểu dữ liệu "danh mục"
df.groupby[df.index.date]['col1'].sum[].cumsum[]
1Bây giờ chúng ta có thể so sánh mức tiêu thụ bộ nhớ của các cột class và class_category
df.groupby[df.index.date]['col1'].sum[].cumsum[]
2Cột class_category tiêu thụ ít hơn một nửa mức tiêu thụ bộ nhớ của cột class. Sự khác biệt là 496 byte không nhiều. Tuy nhiên, khi chúng tôi làm việc với các tập dữ liệu lớn, sự khác biệt chắc chắn sẽ rất quan trọng
Bạn có thể trở thành thành viên Phương tiện để mở khóa quyền truy cập đầy đủ vào bài viết của tôi, cộng với phần còn lại của Phương tiện. Nếu bạn đã đăng ký, đừng quên đăng ký nếu bạn muốn nhận email bất cứ khi nào tôi xuất bản một bài viết mới