Hướng dẫn này chỉ cho bạn cách nhóm các danh sách bên trong của danh sách danh sách Python theo phần tử chung. Có ba phương pháp cơ bản Show
Trước khi chúng tôi khám phá ba tùy chọn này chi tiết hơn, trước tiên hãy cung cấp cho bạn giải pháp nhanh bằng cách sử dụng thư viện Pandas trong trình bao tương tác của chúng tôi Bạn có thể chạy mã này trong trình duyệt của mình. Nếu bạn muốn tìm hiểu về các giải pháp thay thế Pythonic hoặc bạn cần thêm một số giải thích, hãy đọc tiếp Phương pháp 1. Nhóm danh sách các danh sách theo yếu tố phổ biến trong từ điểnVấn đề. Đưa ra một danh sách các danh sách. Nhóm các phần tử theo phần tử chung và lưu kết quả vào từ điển (key = phần tử chung) Thí dụ. Giả sử, bạn có một cơ sở dữ liệu có nhiều hàng (danh sách các danh sách) trong đó mỗi hàng bao gồm ba thuộc tính. Tên, Tuổi và Thu nhập. Bạn muốn nhóm theo Tên và lưu trữ kết quả trong từ điển. Các khóa từ điển được cung cấp bởi thuộc tính Tên. Các giá trị từ điển là danh sách các hàng có thuộc tính Tên chính xác này Dung dịch. Đây là dữ liệu và cách bạn có thể nhóm theo một thuộc tính chung (e. g. , Tên) # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} Bạn có thể thấy rằng kết quả là một từ điển với một khóa cho mỗi tên ( # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}5, # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}6 và # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}7). Alice xuất hiện trong hai hàng của cơ sở dữ liệu gốc (danh sách các danh sách). Do đó, bạn liên kết hai hàng với tên của cô ấy—chỉ duy trì các thuộc tính Tuổi và Thu nhập trên mỗi hàng Chiến lược làm thế nào bạn thực hiện điều này là đơn giản
Càng xa càng tốt. Nhưng nếu bạn muốn thực hiện một số tổng hợp trên các hàng cơ sở dữ liệu được nhóm thì sao? Phương pháp 2. Nhóm danh sách các danh sách theo phần tử chung và tổng hợp các phần tử được nhómVấn đề. Trong ví dụ trước, bạn đã thấy rằng mỗi giá trị từ điển là một danh sách các danh sách vì bạn lưu trữ mỗi hàng dưới dạng một danh sách riêng biệt. Nhưng nếu bạn muốn tổng hợp tất cả các hàng được nhóm thì sao? Thí dụ. Mục từ điển cho khóa # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}5 có thể là # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}1 nhưng bạn muốn tính trung bình giá trị tuổi và thu nhập. # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}0. Làm thế nào để bạn làm điều đó? Dung dịch. Giải pháp đơn giản là thêm một bước hậu xử lý sau đoạn mã trên để tổng hợp tất cả các thuộc tính bằng cách sử dụng hàm # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}1 như sau. Lưu ý rằng đây là mã chính xác như trước (không có tổng hợp) với ba dòng được thêm vào cuối để tổng hợp danh sách các danh sách cho mỗi Tên được nhóm thành một giá trị trung bình duy nhất # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]} Trong mã, bạn sử dụng hàm tổng hợp # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] # Create a dictionary grouped by Name d = {} for row in rows: # Add name to dict if not exists if row[0] not in d: d[row[0]] = [] # Add all non-Name attributes as a new list d[row[0]].append(row[1:]) print(d) # {'Alice': [[19, 45000], [33, 118000]], # 'Bob': [[18, 22000]], # 'Ann': [[26, 88000]]} # AGGREGATION FUNCTION: for key in d: d[key] = [sum(x) / len(x) for x in zip(*d[key])] print(d) # {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}2 để tính giá trị trung bình cho từng thuộc tính của các hàng được nhóm. Nhưng bạn có thể thay thế phần này bằng hàm tổng hợp của riêng bạn, chẳng hạn như trung bình, phương sai, độ dài, tối thiểu, tối đa, v.v. Giải trình
Xem điều gì xảy ra trong đoạn mã này trong công cụ trực quan hóa bộ nhớ tương tác này (bằng cách nhấp vào “Tiếp theo”) Phương pháp 3. Nhóm gấu trúcByThư viện Pandas có triển khai chức năng groupby() mạnh mẽ của riêng nó. Hãy nhìn vào mã đầu tiên # Database: # row = [Name, Age, Income] rows = [['Alice', 19, 45000], ['Bob', 18, 22000], ['Ann', 26, 88000], ['Alice', 33, 118000]] import pandas as pd df = pd.DataFrame(rows) print(df) ''' 0 1 2 0 Alice 19 45000 1 Bob 18 22000 2 Ann 26 88000 3 Alice 33 118000 ''' print(df.groupby([0]).mean()) ''' 1 2 0 Alice 26 81500 Ann 26 88000 Bob 18 22000 ''' Giải trình
Đi đâu từ đây?Đủ lý thuyết. Hãy thực hành một số Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì? Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không? 🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người mới hoàn toàn Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã của mình trực tuyến cũng như cách bạn có thể làm được—từ sự thoải mái của bạn Tham gia hội thảo trên web miễn phí ngay bây giờ Chris Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây |