Pandas GroupBy là một hàm mạnh mẽ và linh hoạt trong Python. Nó cho phép bạn chia dữ liệu của mình thành các nhóm riêng biệt để thực hiện các phép tính phân tích tốt hơn, cũng như hoàn toàn tương tự như groupby trong SQL
Please to me get a example to giải thích rõ hơn về điều này. Giả sử chúng ta có một tập tin Bán hàng. xlsx tổng hợp các đơn hàng trong ngày và chúng ta muốn xem mặt hàng nào có doanh số cao nhất, thấp nhất trong ngày [cột đơn hàng] thì sẽ như sau
Để thực hiện tất cả các bước trên trong python chỉ cần một lệnh groupby đơn giản. ¶
Trước hết cần tải tệp dữ liệu Bán hàng lên
import pandas as pd Sales = pd.read_excel['Sales.xlsx'] Sales
tài khoảnđặt hàngext price038308010001235. 83138308010001232. 32238308010001107. 973412290100052679. 36441229010005286. 02541229010005832. 956412290100053472. 04741229010005915. 128218895100063061. 12921889510006518. 651021889510006216. 901121889510006-72. 18
Sau đó, sử dụng một lệnh groupby đơn giản để nhóm dữ liệu theo cột 'thứ tự'
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped
giá mở rộngorder10001576. 12100058185. 49100063724. 49
Nếu dữ liệu lớn có thể sắp xếp theo thứ tự tăng hoặc giảm dần để dễ đánh giá
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped
giá mở rộngorder10001576. 12100063724. 49100058185. 49
Hàm groupby trong gấu trúc còn có nhiều tham số khác để bạn có thể tùy chỉnh. ¶
Khung dữ liệu. groupby[by=None, level=None, as_index=True, sort=True, dropna=True]
- qua. chỉ định tiêu chí, đối tượng cần nhóm, như cột 'thứ tự' trong ví dụ trên
- mức độ. integer or string type. Nếu trục là MultiIndex [phân cấp], thì nhóm theo các cấp cụ thể
- as_index. kiểu bool, default=True. Biến tiêu chí cột thành Index [chỉ số], as_index = False thì giữ nguyên chỉ mục cũ
- loại. kiểu bool, default=True. Sắp xếp các cột tiêu chí theo thứ tự
- dropna. kiểu bool, default=True. Loại bỏ những hàng và cột có giá trị Nan
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df
Vận tốc tối đa [km/h]LoàiMôi trường sốngChim ưng Được nuôi390. 0Hoàng dã350. 0Vẹt được nuôi30. 0Hoàng dã20. 0
Bạn có thể chuyển đổi hiển thị lời nhắc và đầu ra bằng cách nhấp vào
>>> width = 20 >>> height = 5 * 9 >>> width * height 9001 ở góc trên bên phải của hộp ví dụ. Nếu bạn ẩn lời nhắc và xuất ra một ví dụ, thì bạn có thể dễ dàng sao chép và dán các dòng đầu vào vào trình thông dịch của mình
Nhiều ví dụ trong sách hướng dẫn này, ngay cả những ví dụ được nhập tại dấu nhắc tương tác, bao gồm nhận xét. Nhận xét trong Python bắt đầu bằng ký tự băm,
>>> width = 20 >>> height = 5 * 9 >>> width * height 9002 và kéo dài đến cuối dòng vật lý. Một nhận xét có thể xuất hiện ở đầu dòng hoặc sau khoảng trắng hoặc mã, nhưng không xuất hiện trong một chuỗi ký tự. Một ký tự băm trong một chuỗi ký tự chỉ là một ký tự băm. Vì các nhận xét là để làm rõ mã và không được giải thích bởi Python, chúng có thể bị bỏ qua khi nhập các ví dụ
Vài ví dụ
# this is the first comment spam = 1 # and this is the second comment # .. and now a third! text = "# This is not a comment because it's inside quotes."
3. 1. Sử dụng Python làm Máy tính¶
Hãy thử một số lệnh Python đơn giản. Khởi động trình thông dịch và chờ lời nhắc chính,
>>> width = 20 >>> height = 5 * 9 >>> width * height 9001. [Không nên mất nhiều thời gian. ]
3. 1. 1. Số¶
Trình thông dịch hoạt động như một máy tính đơn giản. bạn có thể nhập một biểu thức vào nó và nó sẽ ghi giá trị. Cú pháp biểu thức đơn giản. các toán tử
>>> width = 20 >>> height = 5 * 9 >>> width * height 9004,
>>> width = 20 >>> height = 5 * 9 >>> width * height 9005,
>>> width = 20 >>> height = 5 * 9 >>> width * height 9006 và
>>> width = 20 >>> height = 5 * 9 >>> width * height 9007 hoạt động giống như trong hầu hết các ngôn ngữ khác [ví dụ: Pascal hoặc C]; . Ví dụ
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped3
Các số nguyên [e. g. ________ 49, ________ 150, ________ 151] có dạng _______ 152, những bài có phần phân số [e. g.
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped53,
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped54] có loại
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped55. Chúng ta sẽ xem thêm về các loại số sau trong hướng dẫn
Division [
>>> width = 20 >>> height = 5 * 9 >>> width * height 9007] luôn trả về một float. Để thực hiện chia tầng và nhận kết quả là số nguyên, bạn có thể sử dụng toán tử
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped57; .
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped4
Với Python, có thể sử dụng toán tử
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped59 để tính lũy thừa 1
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped6
Dấu bằng [
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped70] được sử dụng để gán giá trị cho một biến. Sau đó, không có kết quả nào được hiển thị trước lời nhắc tương tác tiếp theo
>>> width = 20 >>> height = 5 * 9 >>> width * height 900
Nếu một biến không được "xác định" [được gán một giá trị], cố gắng sử dụng nó sẽ báo lỗi cho bạn
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped5
Có hỗ trợ đầy đủ cho dấu phẩy động;
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped7
Trong chế độ tương tác, biểu thức in cuối cùng được gán cho biến
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped71. Điều này có nghĩa là khi bạn đang sử dụng Python làm máy tính bàn, việc tiếp tục tính toán sẽ dễ dàng hơn một chút, chẳng hạn
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df2
Biến này phải được người dùng coi là chỉ đọc. Không gán giá trị cho nó một cách rõ ràng — bạn sẽ tạo một biến cục bộ độc lập có cùng tên che dấu biến tích hợp với hành vi kỳ diệu của nó
Ngoài
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped52 và
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped55, Python hỗ trợ các loại số khác, chẳng hạn như
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped74 và
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped75. Python cũng có hỗ trợ tích hợp cho số phức và sử dụng hậu tố
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped76 hoặc
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped77 để biểu thị phần ảo [e. g.
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped78].
3. 1. 2. Chuỗi¶
Bên cạnh các số, Python cũng có thể thao tác với các chuỗi, có thể được biểu diễn theo nhiều cách. Chúng có thể được đặt trong dấu ngoặc đơn [
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped79] hoặc dấu ngoặc kép [
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df20] với kết quả như nhau 2.
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df21 có thể được sử dụng để thoát dấu ngoặc kép
>>> width = 20 >>> height = 5 * 9 >>> width * height 9003
Trong trình thông dịch tương tác, chuỗi đầu ra được đặt trong dấu ngoặc kép và các ký tự đặc biệt được thoát bằng dấu gạch chéo ngược. Mặc dù điều này đôi khi trông khác với đầu vào [dấu ngoặc kép kèm theo có thể thay đổi], hai chuỗi này tương đương nhau. Chuỗi được đặt trong dấu nháy kép nếu chuỗi chứa dấu nháy đơn và không có dấu nháy kép, ngược lại chuỗi được đặt trong dấu nháy đơn. Hàm
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df22 tạo ra đầu ra dễ đọc hơn, bằng cách bỏ qua các dấu ngoặc kép kèm theo và bằng cách in các ký tự thoát và ký tự đặc biệt
>>> width = 20 >>> height = 5 * 9 >>> width * height 9005
Nếu bạn không muốn các ký tự mở đầu bằng
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df21 được hiểu là các ký tự đặc biệt, bạn có thể sử dụng các chuỗi thô bằng cách thêm một
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df24 trước trích dẫn đầu tiên
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped30
Chuỗi ký tự có thể kéo dài nhiều dòng. Một cách là sử dụng dấu ngoặc kép.
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df25 hoặc
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df26. Cuối dòng được tự động đưa vào chuỗi, nhưng có thể ngăn chặn điều này bằng cách thêm
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df21 vào cuối dòng. ví dụ sau
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped31
tạo đầu ra sau [lưu ý rằng không bao gồm dòng mới ban đầu]
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped32
Các chuỗi có thể được nối [dán lại với nhau] bằng toán tử
>>> width = 20 >>> height = 5 * 9 >>> width * height 9004 và lặp lại với
>>> width = 20 >>> height = 5 * 9 >>> width * height 9006
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped33
Hai hoặc nhiều chuỗi ký tự [i. e. những cái được đặt giữa các dấu ngoặc kép] cạnh nhau sẽ tự động được nối
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped34
Tính năng này đặc biệt hữu ích khi bạn muốn ngắt các chuỗi dài
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped35
Tuy nhiên, điều này chỉ hoạt động với hai chữ, không hoạt động với các biến hoặc biểu thức
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped36
Nếu bạn muốn nối các biến hoặc một biến và một chữ, hãy sử dụng
>>> width = 20 >>> height = 5 * 9 >>> width * height 9004
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped37
Các chuỗi có thể được lập chỉ mục [được đăng ký], với ký tự đầu tiên có chỉ số 0. Không có loại ký tự riêng biệt;
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped38
Các chỉ số cũng có thể là số âm, để bắt đầu đếm từ bên phải
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped39
Lưu ý rằng vì -0 giống như 0, nên các chỉ số âm bắt đầu từ -1
Ngoài lập chỉ mục, cắt lát cũng được hỗ trợ. Trong khi lập chỉ mục được sử dụng để lấy các ký tự riêng lẻ, thì việc cắt lát cho phép bạn lấy chuỗi con
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped40
Các chỉ số lát cắt có các giá trị mặc định hữu ích;
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped41
Lưu ý cách bắt đầu luôn được bao gồm và kết thúc luôn bị loại trừ. Điều này đảm bảo rằng
>>> width = 20 >>> height = 5 * 9 >>> width * height 90031 luôn bằng với
>>> width = 20 >>> height = 5 * 9 >>> width * height 90032
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped42
Một cách để nhớ cách thức hoạt động của các lát cắt là coi các chỉ số như trỏ giữa các ký tự, với cạnh trái của ký tự đầu tiên được đánh số 0. Khi đó cạnh phải của ký tự cuối cùng của xâu n ký tự có chỉ số n chẳng hạn
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped43
Hàng số đầu tiên cho biết vị trí của các chỉ số 0…6 trong chuỗi; . Lát cắt từ i đến j bao gồm tất cả các ký tự nằm giữa các cạnh có nhãn tương ứng là i và j
Đối với các chỉ số không âm, độ dài của một lát cắt là sự khác biệt của các chỉ số, nếu cả hai đều nằm trong giới hạn. Ví dụ: chiều dài của
>>> width = 20 >>> height = 5 * 9 >>> width * height 90033 là 2
Cố gắng sử dụng một chỉ mục quá lớn sẽ dẫn đến lỗi
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped44
Tuy nhiên, các chỉ mục lát cắt nằm ngoài phạm vi được xử lý một cách duyên dáng khi được sử dụng để cắt lát
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped45
Không thể thay đổi chuỗi Python — chúng bất biến . Do đó, việc gán cho một vị trí được lập chỉ mục trong chuỗi dẫn đến lỗi.
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped46
Nếu bạn cần một chuỗi khác, bạn nên tạo một chuỗi mới
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped47
Hàm tích hợp sẵn
>>> width = 20 >>> height = 5 * 9 >>> width * height 90034 trả về độ dài của chuỗi
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped48
Xem thêm
Loại chuỗi văn bản — strChuỗi là ví dụ về các loại trình tự và hỗ trợ các hoạt động phổ biến được hỗ trợ bởi các loại đó
Phương thức chuỗiCác chuỗi hỗ trợ một số lượng lớn các phương thức để chuyển đổi và tìm kiếm cơ bản
Chuỗi ký tự được định dạngChuỗi ký tự có biểu thức nhúng
Thông tin về định dạng chuỗi với
>>> width = 20 >>> height = 5 * 9 >>> width * height 90035Định dạng chuỗi kiểu printf
Các hoạt động định dạng cũ được gọi khi chuỗi là toán hạng bên trái của toán tử
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped58 được mô tả chi tiết hơn tại đây
3. 1. 3. Danh sách¶
Python biết một số loại dữ liệu phức hợp, được sử dụng để nhóm các giá trị khác lại với nhau. Linh hoạt nhất là danh sách, có thể được viết dưới dạng danh sách các giá trị [mục] được phân tách bằng dấu phẩy giữa các dấu ngoặc vuông. Danh sách có thể chứa các mục thuộc các loại khác nhau, nhưng thông thường tất cả các mục đều có cùng loại
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped49
Giống như chuỗi [và tất cả các loại trình tự tích hợp sẵn khác], danh sách có thể được lập chỉ mục và cắt lát.
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped60
Tất cả các thao tác cắt trả về một danh sách mới chứa các phần tử được yêu cầu. Điều này có nghĩa là lát cắt sau trả về một bản sao nông của danh sách.
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped61
Danh sách cũng hỗ trợ các hoạt động như nối
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped62
Không giống như chuỗi không thay đổi , danh sách là có thể thay đổi type, i.e. it is possible to change their content:
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped63
Bạn cũng có thể thêm các mục mới vào cuối danh sách bằng cách sử dụng phương thức
>>> width = 20 >>> height = 5 * 9 >>> width * height 90037 [chúng ta sẽ xem thêm về các phương thức sau]
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped64
Cũng có thể gán cho các lát và điều này thậm chí có thể thay đổi kích thước của danh sách hoặc xóa hoàn toàn
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped65
Hàm tích hợp sẵn
>>> width = 20 >>> height = 5 * 9 >>> width * height 90034 cũng áp dụng cho danh sách
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped66
Có thể lồng danh sách [tạo danh sách chứa danh sách khác] chẳng hạn
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped67
3. 2. Những bước đầu tiên để lập trình¶
Tất nhiên, chúng ta có thể sử dụng Python cho các tác vụ phức tạp hơn là cộng hai với hai lại với nhau. Chẳng hạn, chúng ta có thể viết một dãy con ban đầu của dãy Fibonacci như sau
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped68
Ví dụ này giới thiệu một số tính năng mới
Dòng đầu tiên chứa nhiều nhiệm vụ. các biến
>>> width = 20 >>> height = 5 * 9 >>> width * height 900
39 và>>> width = 20 >>> height = 5 * 9 >>> width * height 900
50 đồng thời nhận các giá trị mới 0 và 1. Ở dòng cuối cùng, điều này được sử dụng lại, chứng minh rằng tất cả các biểu thức ở phía bên tay phải đều được ước tính trước khi thực hiện bất kỳ phép gán nào. Các biểu thức bên phải được đánh giá từ trái sang phảiVòng lặp
>>> width = 20 >>> height = 5 * 9 >>> width * height 900
51 thực hiện miễn là điều kiện [ở đây.>>> width = 20 >>> height = 5 * 9 >>> width * height 900
52] vẫn đúng. Trong Python, giống như trong C, mọi giá trị số nguyên khác 0 đều đúng; . Điều kiện cũng có thể là một chuỗi hoặc giá trị danh sách, trên thực tế là bất kỳ chuỗi nào; . Bài kiểm tra được sử dụng trong ví dụ là phép so sánh đơn giản. Các toán tử so sánh tiêu chuẩn được viết giống như trong C.>>> width = 20 >>> height = 5 * 9 >>> width * height 900
53 [nhỏ hơn],>>> width = 20 >>> height = 5 * 9 >>> width * height 900
54 [lớn hơn],>>> width = 20 >>> height = 5 * 9 >>> width * height 900
55 [bằng],>>> width = 20 >>> height = 5 * 9 >>> width * height 900
56 [nhỏ hơn hoặc bằng], ________ 457 [lớn hơn hoặc bằng] và ________ 458 [không bằng]Phần thân của vòng lặp được thụt vào. thụt lề là cách nhóm các câu lệnh của Python. Tại dấu nhắc tương tác, bạn phải nhập một tab hoặc [các] dấu cách cho mỗi dòng thụt vào. Trong thực tế, bạn sẽ chuẩn bị đầu vào phức tạp hơn cho Python bằng trình soạn thảo văn bản; . Khi một câu lệnh ghép được nhập một cách tương tác, nó phải được theo sau bởi một dòng trống để biểu thị việc hoàn thành [vì trình phân tích cú pháp không thể đoán khi bạn đã nhập dòng cuối cùng]. Lưu ý rằng mỗi dòng trong một khối cơ bản phải được thụt vào cùng một lượng
Hàm
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df
22 ghi giá trị của [các] đối số mà nó được cung cấp. Nó khác với việc chỉ viết biểu thức mà bạn muốn viết [như chúng ta đã làm trước đó trong các ví dụ về máy tính] ở cách nó xử lý nhiều đối số, số lượng dấu phẩy động và chuỗi. Các chuỗi được in mà không có dấu ngoặc kép và khoảng trắng được chèn vào giữa các mục, vì vậy bạn có thể định dạng mọi thứ một cách độc đáo, như thế này# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped
69Đối số từ khóa end có thể được sử dụng để tránh dòng mới sau đầu ra hoặc kết thúc đầu ra bằng một chuỗi khác
>>> width = 20 >>> height = 5 * 9 >>> width * height 900
0
chú thích
1Vì
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped59 có quyền ưu tiên cao hơn
>>> width = 20 >>> height = 5 * 9 >>> width * height 9005, nên
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped302 sẽ được hiểu là
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped303 và do đó dẫn đến
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped304. Để tránh điều này và nhận được
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped305, bạn có thể sử dụng
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped3062
Không giống như các ngôn ngữ khác, các ký tự đặc biệt như
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped307 có cùng ý nghĩa với cả dấu ngoặc đơn [
# sort_values[by='ext price', ascending=True] lệnh sắp xếp dữ liệu theo cột 'ext price' theo thứ tự tăng dần [ascending=True], nếu giảm dần thì [ascending=False] Sales_grouped = Sales.groupby['order',group_keys=False].agg[{'ext price': 'sum'}].sort_values[by='ext price', ascending=True] Sales_grouped79] và dấu ngoặc kép [
# Tạo Dataframe arrays = [['Chim ưng', 'Chim ưng', 'Vẹt', 'Vẹt'], ['Được nuôi', 'Hoang dã','Được nuôi', 'Hoang dã']] index = pd.MultiIndex.from_arrays[arrays, names=['Loài', 'Môi trường sống']] df = pd.DataFrame[{'Vận tốc tối đa [km/h]': [390., 350., 30., 20.]}, index=index] df20]. Sự khác biệt duy nhất giữa hai loại này là trong các dấu ngoặc đơn, bạn không cần phải thoát khỏi
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped310 [nhưng bạn phải thoát khỏi
# groupby['order'] là cột tiêu chí mà chúng ta muốn nhóm dữ liệu theo tiêu chí đó, có thể có một hoặc nhiều tiêu chí # agg[{'ext price': 'sum'}] là cột dữ liệu mà chúng ta đang muốn nhóm, và nhóm theo kiểu lấy tổng [sum] Sales_grouped = Sales.groupby[by='order'].agg[{'ext price': 'sum'}] Sales_grouped311] và ngược lại