Trong số này, bước tách là đơn giản nhất. Trên thực tế, trong nhiều tình huống, chúng tôi có thể muốn chia tập dữ liệu thành các nhóm và làm gì đó với các nhóm đó. Trong bước áp dụng, chúng tôi có thể muốn thực hiện một trong những điều sau đây
tổng hợp. tính toán thống kê tóm tắt [hoặc thống kê] cho mỗi nhóm. Vài ví dụ
Tính tổng hoặc phương tiện của nhóm
Tính toán kích thước / số lượng nhóm
chuyển đổi. thực hiện một số tính toán dành riêng cho nhóm và trả về một đối tượng được lập chỉ mục giống như. Vài ví dụ
Chuẩn hóa dữ liệu [zscore] trong một nhóm
Điền NA trong các nhóm với một giá trị bắt nguồn từ mỗi nhóm
lọc. loại bỏ một số nhóm, theo tính toán theo nhóm để đánh giá Đúng hoặc Sai. Vài ví dụ
Loại bỏ dữ liệu thuộc về các nhóm chỉ có một vài thành viên
Lọc ra dữ liệu dựa trên tổng hoặc giá trị trung bình của nhóm
Một số kết hợp của những điều trên. GroupBy sẽ kiểm tra kết quả của bước áp dụng và cố gắng trả lại kết quả được kết hợp hợp lý nếu kết quả đó không phù hợp với một trong hai loại trên
Vì tập hợp các phương thức thể hiện đối tượng trên cấu trúc dữ liệu gấu trúc nói chung là phong phú và biểu cảm, nên chúng ta thường chỉ muốn gọi một hàm DataFrame trên mỗi nhóm. Cái tên GroupBy hẳn đã khá quen thuộc với những ai đã sử dụng công cụ dựa trên SQL [hoặc
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]02], trong đó bạn có thể viết mã như
SELECT Column1, Column2, mean[Column3], sum[Column4] FROM SomeTable GROUP BY Column1, Column2
Chúng tôi mong muốn thực hiện các thao tác như thế này một cách tự nhiên và dễ dàng thể hiện bằng cách sử dụng gấu trúc. Chúng tôi sẽ giải quyết từng lĩnh vực của chức năng GroupBy, sau đó cung cấp một số ví dụ/trường hợp sử dụng không tầm thường
Xem một số chiến lược nâng cao
Tách một đối tượng thành các nhóm
các đối tượng gấu trúc có thể được phân chia trên bất kỳ trục nào của chúng. Định nghĩa trừu tượng của nhóm là cung cấp ánh xạ nhãn tới tên nhóm. Để tạo một đối tượng GroupBy [sẽ nói thêm về đối tượng GroupBy ở phần sau], bạn có thể làm như sau
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
Ánh xạ có thể được chỉ định theo nhiều cách khác nhau
Một hàm Python, được gọi trên mỗi nhãn trục
Một danh sách hoặc mảng NumPy có cùng độ dài với trục đã chọn
Một lệnh hoặc
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
03, cung cấp một ánh xạIn [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
04Đối với các đối tượng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
05, một chuỗi cho biết tên cột hoặc tên cấp chỉ mục được sử dụng để nhómIn [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
06 chỉ là đường cú pháp choIn [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
07Một danh sách của bất kỳ những điều trên
Nói chung, chúng tôi gọi các đối tượng nhóm là các khóa. Ví dụ, hãy xem xét điều sau
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]05
Ghi chú
Một chuỗi được chuyển đến
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]09 có thể đề cập đến một cột hoặc một cấp độ chỉ mục. Nếu một chuỗi khớp với cả tên cột và tên cấp chỉ mục, thì sẽ có một số
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]10
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.271860
Trên DataFrame, chúng tôi có được một đối tượng GroupBy bằng cách gọi. Chúng ta có thể nhóm một cách tự nhiên theo cột
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]12 hoặc
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]13 hoặc cả hai
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]
Nếu chúng tôi cũng có MultiIndex trên các cột
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]12 và
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]13, chúng tôi có thể nhóm theo tất cả trừ các cột được chỉ định
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.402938
Chúng sẽ phân chia DataFrame trên chỉ mục của nó [hàng]. Chúng tôi cũng có thể chia theo các cột
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]
đối tượng gấu trúc hỗ trợ các giá trị trùng lặp. Nếu một chỉ mục không phải là duy nhất được sử dụng làm khóa nhóm trong thao tác theo nhóm, tất cả các giá trị cho cùng một giá trị chỉ mục sẽ được coi là thuộc một nhóm và do đó, đầu ra của các hàm tổng hợp sẽ chỉ chứa các giá trị chỉ mục duy nhất
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int64
Lưu ý rằng không có sự phân chia nào xảy ra cho đến khi cần thiết. Việc tạo đối tượng GroupBy chỉ xác minh rằng bạn đã vượt qua một ánh xạ hợp lệ
Ghi chú
Nhiều loại thao tác dữ liệu phức tạp có thể được thể hiện dưới dạng hoạt động của GroupBy [mặc dù không thể đảm bảo hiệu quả nhất]. Bạn có thể khá sáng tạo với các chức năng ánh xạ nhãn
Phân loại theo nhóm
Theo mặc định, các khóa nhóm được sắp xếp trong hoạt động
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]09. Tuy nhiên, bạn có thể vượt qua
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]18 để tăng tốc tiềm năng
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 7
Lưu ý rằng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]09 sẽ giữ nguyên thứ tự sắp xếp các quan sát trong mỗi nhóm. Ví dụ: các nhóm được tạo bởi
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]11 bên dưới theo thứ tự xuất hiện trong bản gốc
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]05
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 2
Mới trong phiên bản 1. 1. 0
GroupBy dropna
Theo mặc định, các giá trị
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]22 bị loại trừ khỏi các khóa nhóm trong quá trình vận hành
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]09. Tuy nhiên, trong trường hợp bạn muốn bao gồm các giá trị
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]22 trong khóa nhóm, bạn có thể vượt qua
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]25 để đạt được điều đó
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 2
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]0
Cài đặt mặc định của đối số
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]26 là
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]27 có nghĩa là
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]22 không được bao gồm trong khóa nhóm
Thuộc tính đối tượng GroupBy
Thuộc tính
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]29 là một lệnh có các khóa là các nhóm duy nhất được tính toán và các giá trị tương ứng là các nhãn trục thuộc mỗi nhóm. Trong ví dụ trên chúng ta có
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]1
Việc gọi hàm Python tiêu chuẩn
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]30 trên đối tượng GroupBy chỉ trả về độ dài của lệnh
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]29, vì vậy phần lớn nó chỉ là một tiện ích
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]2
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]32 sẽ hoàn thành tab tên cột [và các thuộc tính khác]
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]3
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]4
GroupBy với Multi Index
Với , việc nhóm theo một trong các cấp của hệ thống phân cấp là điều hoàn toàn tự nhiên
Hãy tạo một Sê-ri có
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]33 hai cấp
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]5
Sau đó, chúng ta có thể nhóm theo một trong các cấp độ trong
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]34
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]6
Nếu MultiIndex có tên được chỉ định, chúng có thể được chuyển thay vì số cấp
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]7
Nhóm với nhiều cấp độ được hỗ trợ
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]8
Tên cấp chỉ mục có thể được cung cấp dưới dạng khóa
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]9
Thông tin thêm về hàm và tổng hợp
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]35 sau
Nhóm DataFrame với các cấp và cột Chỉ mục
Một DataFrame có thể được nhóm theo sự kết hợp của các cột và cấp chỉ mục bằng cách chỉ định tên cột là chuỗi và cấp chỉ mục là đối tượng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]36
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718600
Ví dụ sau đây nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]37 theo cấp chỉ mục
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]38 và cột
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]12
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718601
Các mức chỉ mục cũng có thể được chỉ định theo tên
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718602
Tên cấp chỉ mục có thể được chỉ định làm khóa trực tiếp tới
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]09
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718603
Lựa chọn cột DataFrame trong GroupBy
Khi bạn đã tạo đối tượng GroupBy từ DataFrame, bạn có thể muốn làm điều gì đó khác cho từng cột. Do đó, sử dụng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]41 tương tự như lấy một cột từ DataFrame, bạn có thể làm
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718604
Đây chủ yếu là đường cú pháp cho sự thay thế và dài dòng hơn nhiều
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718605
Ngoài ra, phương pháp này tránh tính toán lại thông tin nhóm nội bộ bắt nguồn từ khóa đã truyền
Lặp lại thông qua các nhóm
Với đối tượng GroupBy trong tay, việc lặp qua dữ liệu được nhóm là rất tự nhiên và hoạt động tương tự như
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718606
Trong trường hợp nhóm theo nhiều khóa, tên nhóm sẽ là một bộ
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718607
Thấy
Chọn một nhóm
Có thể chọn một nhóm duy nhất bằng cách sử dụng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]43
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718608
Hoặc đối với một đối tượng được nhóm trên nhiều cột
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.2718609
tổng hợp
Khi đối tượng GroupBy đã được tạo, một số phương thức có sẵn để thực hiện tính toán trên dữ liệu được nhóm. Các hoạt động này tương tự như , , và
Một điều hiển nhiên là tổng hợp thông qua phương pháp
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]45 hoặc tương đương
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]0
Như bạn có thể thấy, kết quả của phép tổng hợp sẽ có tên nhóm làm chỉ mục mới dọc theo trục được nhóm. Trong trường hợp có nhiều khóa, kết quả là một theo mặc định, mặc dù điều này có thể được thay đổi bằng cách sử dụng tùy chọn
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]46
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]1
Lưu ý rằng bạn có thể sử dụng hàm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]47 DataFrame để đạt được kết quả tương tự vì tên cột được lưu trữ trong kết quả
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]33
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]2
Một ví dụ tổng hợp đơn giản khác là tính toán kích thước của mỗi nhóm. Điều này được bao gồm trong GroupBy dưới dạng phương thức
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]49. Nó trả về một Sê-ri có chỉ mục là tên nhóm và có giá trị là kích thước của mỗi nhóm
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]3
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]4
Một ví dụ tổng hợp khác là tính toán số lượng giá trị duy nhất của mỗi nhóm. Điều này tương tự như hàm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]50, ngoại trừ việc nó chỉ tính các giá trị duy nhất
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]5
Ghi chú
Các hàm tổng hợp sẽ không trả về các nhóm mà bạn đang tổng hợp nếu chúng được đặt tên theo cột, khi
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]51, giá trị mặc định. Các cột được nhóm sẽ là chỉ số của đối tượng được trả về
Vượt qua
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]52 sẽ trả về các nhóm mà bạn đang tổng hợp, nếu chúng được đặt tên theo cột
Các hàm tổng hợp là những hàm làm giảm kích thước của các đối tượng được trả về. Một số chức năng tổng hợp phổ biến được lập bảng dưới đây
Hàm số
Sự miêu tả
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]53
Tính giá trị trung bình của các nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]54
Tính tổng các giá trị nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]55
Tính kích thước nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]56
Tính số lượng nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]57
Độ lệch chuẩn của các nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]58
Tính toán phương sai của các nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]59
Sai số chuẩn của giá trị trung bình của các nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]60
Tạo thống kê mô tả
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]61
Tính toán đầu tiên của các giá trị nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]62
Tính giá trị cuối cùng của nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]63
Lấy giá trị thứ n hoặc tập hợp con nếu n là danh sách
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]64
Tính giá trị tối thiểu của nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]65
Tính giá trị tối đa của nhóm
Các chức năng tổng hợp ở trên sẽ loại trừ các giá trị NA. Bất kỳ hàm nào giảm a thành giá trị vô hướng đều là hàm tổng hợp và sẽ hoạt động, một ví dụ tầm thường là
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]67. Lưu ý rằng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]63 có thể đóng vai trò là bộ giảm tốc hoặc bộ lọc, xem
Áp dụng nhiều chức năng cùng một lúc
Với
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]03 được nhóm, bạn cũng có thể chuyển một danh sách hoặc lệnh của các hàm để thực hiện tổng hợp, xuất ra một DataFrame
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]6
Trên một
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]05 được nhóm, bạn có thể chuyển một danh sách các hàm để áp dụng cho từng cột, danh sách này tạo ra kết quả tổng hợp với chỉ mục phân cấp
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]7
Các tập hợp kết quả được đặt tên cho chính các chức năng. Nếu bạn cần đổi tên, thì bạn có thể thêm vào một chuỗi hoạt động cho một
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]03 như thế này
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]8
Đối với một nhóm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]05, bạn có thể đổi tên theo cách tương tự
In [8]: grouped = df.groupby["A"] In [9]: grouped = df.groupby[["A", "B"]]9
Ghi chú
Nói chung, tên cột đầu ra phải là duy nhất. Bạn không thể áp dụng cùng một hàm [hoặc hai hàm trùng tên] cho cùng một cột
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029380
gấu trúc không cho phép bạn cung cấp nhiều lambdas. Trong trường hợp này, gấu trúc sẽ xáo trộn tên của các hàm lambda [không tên], nối thêm ____0_______73 vào mỗi hàm lambda tiếp theo
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029381
tập hợp được đặt tên
Mới trong phiên bản 0. 25. 0
Để hỗ trợ tập hợp theo cột cụ thể với quyền kiểm soát đối với tên cột đầu ra, gấu trúc chấp nhận cú pháp đặc biệt trong
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]74, được gọi là "tập hợp được đặt tên", trong đó
Các từ khóa là tên cột đầu ra
Các giá trị là các bộ có phần tử đầu tiên là cột cần chọn và phần tử thứ hai là tập hợp để áp dụng cho cột đó. gấu trúc cung cấp tên_tuple ___________75 với các trường ________76 để làm rõ hơn các đối số là gì. Như thường lệ, tập hợp có thể là bí danh chuỗi hoặc có thể gọi được
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029382
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]75 chỉ là một
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]78. Bộ dữ liệu đơn giản cũng được cho phép
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029383
Nếu tên cột đầu ra mong muốn của bạn không phải là từ khóa Python hợp lệ, hãy tạo một từ điển và giải nén các đối số từ khóa
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029384
Các đối số từ khóa bổ sung không được chuyển qua các hàm tổng hợp. Chỉ các cặp
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]79 mới được chuyển thành
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]80. Nếu các hàm tổng hợp của bạn yêu cầu các đối số bổ sung, hãy áp dụng một phần chúng với
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]81
Ghi chú
Đối với Trăn 3. 5 trở về trước, thứ tự của
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]80 trong một hàm không được giữ nguyên. Điều này có nghĩa là thứ tự cột đầu ra sẽ không nhất quán. Để đảm bảo thứ tự nhất quán, các khóa [và các cột đầu ra] sẽ luôn được sắp xếp cho Python 3. 5
Tập hợp được đặt tên cũng hợp lệ cho tập hợp theo nhóm Sê-ri. Trong trường hợp này không có lựa chọn cột, vì vậy các giá trị chỉ là các hàm
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029385
Áp dụng các chức năng khác nhau cho các cột DataFrame
Bằng cách chuyển lệnh tới
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]83, bạn có thể áp dụng một tập hợp khác cho các cột của Khung dữ liệu
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029386
Tên hàm cũng có thể là chuỗi. Để một chuỗi hợp lệ, chuỗi đó phải được triển khai trên GroupBy hoặc có sẵn qua
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029387
Các hàm tổng hợp được tối ưu hóa cho Cython
Một số tập hợp phổ biến, hiện chỉ có
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]35,
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]85,
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]86 và
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]87, đã tối ưu hóa việc triển khai Cython
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029388
Tất nhiên,
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]35 và
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]85 được triển khai trên các đối tượng gấu trúc, vì vậy đoạn mã trên sẽ hoạt động ngay cả khi không có phiên bản đặc biệt thông qua công văn [xem bên dưới]
Tập hợp với các chức năng do người dùng xác định
Người dùng cũng có thể cung cấp các chức năng của riêng họ cho các tập hợp tùy chỉnh. Khi tổng hợp bằng Hàm do người dùng xác định [UDF], UDF không được thay đổi
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]03 được cung cấp, xem để biết thêm thông tin
In [10]: df2 = df.set_index[["A", "B"]] In [11]: grouped = df2.groupby[level=df2.index.names.difference[["B"]]] In [12]: grouped.sum[] Out[12]: C D A bar -1.591710 -1.739537 foo -0.752861 -1.4029389
Dtype kết quả sẽ phản ánh của hàm tổng hợp. Nếu kết quả từ các nhóm khác nhau có các kiểu khác nhau, thì một kiểu chung sẽ được xác định theo cách tương tự như xây dựng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]05
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]0
chuyển đổi
Phương thức
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]92 trả về một đối tượng được lập chỉ mục giống như đối tượng được nhóm. Hàm biến đổi phải
Trả về một kết quả có cùng kích thước với đoạn nhóm hoặc có thể phát rộng bằng kích thước của đoạn nhóm [e. g. , vô hướng,
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
93]Thao tác theo từng cột trên đoạn nhóm. Biến đổi được áp dụng cho đoạn nhóm đầu tiên bằng cách sử dụng đoạn. ứng dụng
Không thực hiện các thao tác tại chỗ trên đoạn nhóm. Các đoạn nhóm phải được coi là bất biến và các thay đổi đối với một đoạn nhóm có thể tạo ra kết quả không mong muốn. Ví dụ: khi sử dụng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
94, thìIn [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
95 phải làIn [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
96 [In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]
97][Tùy chọn] hoạt động trên toàn bộ đoạn nhóm. Nếu điều này được hỗ trợ, một đường dẫn nhanh sẽ được sử dụng bắt đầu từ đoạn thứ hai
Không dùng nữa kể từ phiên bản 1. 5. 0. Khi sử dụng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]98 trên DataFrame được nhóm và hàm chuyển đổi trả về một DataFrame, pandas hiện tại không căn chỉnh chỉ mục của kết quả với chỉ mục của đầu vào. Hành vi này không được dùng nữa và việc căn chỉnh sẽ được thực hiện trong phiên bản gấu trúc trong tương lai. Bạn có thể áp dụng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]99 cho kết quả của hàm biến đổi để tránh căn chỉnh.
Tương tự như , dtype kết quả sẽ phản ánh kết quả của hàm chuyển đổi. Nếu kết quả từ các nhóm khác nhau có các loại khác nhau, thì một loại chung sẽ được xác định theo cách tương tự như cách xây dựng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]05
Giả sử chúng ta muốn chuẩn hóa dữ liệu trong mỗi nhóm
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]1
Chúng tôi hy vọng kết quả bây giờ có nghĩa là 0 và độ lệch chuẩn 1 trong mỗi nhóm, chúng tôi có thể dễ dàng kiểm tra
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]2
Chúng ta cũng có thể so sánh trực quan tập dữ liệu gốc và tập dữ liệu đã chuyển đổi
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]3
Các hàm chuyển đổi có đầu ra kích thước thấp hơn được phát sóng để phù hợp với hình dạng của mảng đầu vào
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]4
Ngoài ra, các phương thức tích hợp có thể được sử dụng để tạo ra các đầu ra giống nhau
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]5
Một biến đổi dữ liệu phổ biến khác là thay thế dữ liệu bị thiếu bằng giá trị trung bình của nhóm
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]6
Chúng tôi có thể xác minh rằng phương tiện nhóm không thay đổi trong dữ liệu được chuyển đổi và dữ liệu được chuyển đổi không chứa NA
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]7
Ghi chú
Một số hàm sẽ tự động chuyển đổi đầu vào khi được áp dụng cho đối tượng GroupBy, nhưng trả về đối tượng có hình dạng giống như ban đầu. Vượt qua
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]52 sẽ không ảnh hưởng đến các phương pháp chuyển đổi này
Ví dụ.
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186002
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]8
Hoạt động cửa sổ và lấy mẫu lại
Có thể sử dụng
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186003,
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186004 và
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186005 làm phương thức trên groupbys
Ví dụ dưới đây sẽ áp dụng phương pháp
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186005 trên các mẫu của cột B dựa trên các nhóm của cột A
In [13]: def get_letter_type[letter]: ....: if letter.lower[] in 'aeiou': ....: return 'vowel' ....: else: ....: return 'consonant' ....: In [14]: grouped = df.groupby[get_letter_type, axis=1]9
Phương pháp
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186004 sẽ tích lũy một thao tác nhất định [trong ví dụ là ______0_______54] cho tất cả các thành viên của từng nhóm cụ thể
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int640
Giả sử bạn muốn sử dụng phương pháp
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186003 để nhận tần suất hàng ngày trong mỗi nhóm của khung dữ liệu của mình và muốn hoàn thành các giá trị còn thiếu bằng phương pháp
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186010
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int641
lọc
Phương thức
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186011 trả về một tập hợp con của đối tượng ban đầu. Giả sử chúng ta chỉ muốn lấy các phần tử thuộc về các nhóm có tổng nhóm lớn hơn 2
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int642
Đối số của
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186011 phải là một hàm, được áp dụng cho toàn bộ nhóm, trả về
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]27 hoặc
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]96
Một thao tác hữu ích khác là lọc ra các phần tử thuộc nhóm chỉ có một vài thành viên
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int643
Ngoài ra, thay vì loại bỏ các nhóm vi phạm, chúng ta có thể trả về một đối tượng được lập chỉ mục tương tự trong đó các nhóm không vượt qua bộ lọc chứa đầy NaN
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int644
Đối với DataFrames có nhiều cột, các bộ lọc phải chỉ định rõ ràng một cột làm tiêu chí lọc
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int645
Ghi chú
Một số hàm khi được áp dụng cho một đối tượng nhóm sẽ hoạt động như một bộ lọc trên đầu vào, trả về hình dạng thu nhỏ của bản gốc [và có khả năng loại bỏ các nhóm], nhưng với chỉ mục không thay đổi. Vượt qua
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]52 sẽ không ảnh hưởng đến các phương pháp chuyển đổi này
Ví dụ.
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186016
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int646
Gửi đến các phương thức ví dụ
Khi thực hiện tổng hợp hoặc chuyển đổi, bạn có thể chỉ muốn gọi một phương thức thể hiện trên mỗi nhóm dữ liệu. Điều này khá dễ thực hiện bằng cách chuyển các hàm lambda
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int647
Tuy nhiên, nó khá dài dòng và có thể lộn xộn nếu bạn cần chuyển các đối số bổ sung. Sử dụng một chút thông minh về siêu lập trình, GroupBy hiện có khả năng “gửi” các lệnh gọi phương thức đến các nhóm
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int648
Điều đang thực sự xảy ra ở đây là một trình bao hàm đang được tạo. Khi được gọi, nó nhận mọi đối số đã truyền và gọi hàm với bất kỳ đối số nào trên mỗi nhóm [trong ví dụ trên, hàm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]86]. Các kết quả sau đó được kết hợp với nhau nhiều theo kiểu
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186018 và
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]92 [nó thực sự sử dụng
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186020 để suy ra cách dán, tài liệu tiếp theo]. Điều này cho phép một số hoạt động được thực hiện khá ngắn gọn
In [15]: lst = [1, 2, 3, 1, 2, 3] In [16]: s = pd.Series[[1, 2, 3, 10, 20, 30], lst] In [17]: grouped = s.groupby[level=0] In [18]: grouped.first[] Out[18]: 1 1 2 2 3 3 dtype: int64 In [19]: grouped.last[] Out[19]: 1 10 2 20 3 30 dtype: int64 In [20]: grouped.sum[] Out[20]: 1 11 2 22 3 33 dtype: int649
Trong ví dụ này, chúng tôi đã cắt bộ sưu tập chuỗi thời gian thành các phần hàng năm sau đó gọi các nhóm một cách độc lập
Các phương pháp
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186021 và
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186022 hoạt động trên các nhóm theo phong cách
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]03
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 70
Linh hoạt In [6]: df = pd.DataFrame[
...: {
...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
...: "C": np.random.randn[8],
...: "D": np.random.randn[8],
...: }
...: ]
...:
In [7]: df
Out[7]:
A B C D
0 foo one 0.469112 -0.861849
1 bar one -0.282863 -2.104569
2 foo two -1.509059 -0.494929
3 bar three -1.135632 1.071804
4 foo two 1.212112 0.721555
5 bar two -0.173215 -0.706771
6 foo one 0.119209 -1.039575
7 foo three -1.044236 0.271860
20
Một số thao tác trên dữ liệu được nhóm có thể không phù hợp với danh mục tổng hợp hoặc biến đổi. Hoặc, bạn có thể chỉ muốn GroupBy suy ra cách kết hợp các kết quả. Đối với những điều này, hãy sử dụng hàm
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186020, có thể thay thế cho cả
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]83 và
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]92 trong nhiều trường hợp sử dụng tiêu chuẩn. Tuy nhiên,
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186020 có thể xử lý một số trường hợp sử dụng đặc biệt
Ghi chú
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186020 có thể hoạt động như chức năng giảm tốc, biến áp hoặc lọc, tùy thuộc vào chính xác những gì được truyền cho nó. Nó có thể phụ thuộc vào hàm đã truyền và chính xác những gì bạn đang nhóm. Do đó, [các] cột được nhóm có thể được bao gồm trong đầu ra cũng như đặt các chỉ số
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 71
Kích thước của kết quả trả về cũng có thể thay đổi
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 72
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186020 trên Sê-ri có thể hoạt động dựa trên giá trị được trả về từ hàm được áp dụng, bản thân đó là một sê-ri và có thể đưa kết quả lên Khung dữ liệu
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 73
Kiểm soát [các] vị trí cột được nhóm với In [6]: df = pd.DataFrame[
...: {
...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
...: "C": np.random.randn[8],
...: "D": np.random.randn[8],
...: }
...: ]
...:
In [7]: df
Out[7]:
A B C D
0 foo one 0.469112 -0.861849
1 bar one -0.282863 -2.104569
2 foo two -1.509059 -0.494929
3 bar three -1.135632 1.071804
4 foo two 1.212112 0.721555
5 bar two -0.173215 -0.706771
6 foo one 0.119209 -1.039575
7 foo three -1.044236 0.271860
31
Ghi chú
Nếu
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186032 được chỉ định khi gọi, các chức năng được chuyển đến
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186020 trả về các đầu ra được lập chỉ mục giống như vậy sẽ có các khóa nhóm được thêm vào chỉ mục kết quả. Các phiên bản trước của gấu trúc sẽ chỉ thêm các khóa nhóm khi kết quả từ hàm được áp dụng có chỉ mục khác với đầu vào. Nếu
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186031 không được chỉ định, các khóa nhóm sẽ không được thêm cho các đầu ra được lập chỉ mục tương tự. Trong tương lai, hành vi này sẽ thay đổi thành luôn tôn trọng
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186031, mặc định là
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]27
Thay đổi trong phiên bản 1. 5. 0
Để kiểm soát xem [các] cột được nhóm có được bao gồm trong chỉ mục hay không, bạn có thể sử dụng đối số
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186031. Đối chiếu
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 74
với
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 75
Tương tự như , dtype kết quả sẽ phản ánh của hàm áp dụng. Nếu kết quả từ các nhóm khác nhau có các loại khác nhau, thì một loại chung sẽ được xác định theo cách tương tự như cách xây dựng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]05
Các thói quen tăng tốc Numba
Mới trong phiên bản 1. 1
Nếu Numba được cài đặt dưới dạng phụ thuộc tùy chọn, thì các phương thức
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]92 và
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]83 hỗ trợ các đối số
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186042 và
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186043. Xem để biết cách sử dụng chung các đối số và cân nhắc hiệu suất
Chữ ký hàm phải bắt đầu bằng chính xác
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186044 vì dữ liệu thuộc về từng nhóm sẽ được chuyển vào
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186045 và chỉ mục nhóm sẽ được chuyển vào
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186046
Cảnh báo
Khi sử dụng
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186042, sẽ không có hành vi “lùi lại” trong nội bộ. Dữ liệu nhóm và chỉ mục nhóm sẽ được chuyển dưới dạng mảng NumPy cho hàm do người dùng xác định JITed và sẽ không có lần thử thực thi thay thế nào được thử
Các tính năng hữu ích khác
Tự động loại trừ các cột "phiền toái"
Một lần nữa hãy xem xét ví dụ về DataFrame mà chúng tôi đã xem xét
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 76
Giả sử chúng ta muốn tính độ lệch chuẩn được nhóm theo cột
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]12. Có một vấn đề nhỏ, cụ thể là chúng tôi không quan tâm đến dữ liệu trong cột
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]13. Chúng tôi gọi đây là cột "phiền toái". Bạn có thể tránh các cột phiền toái bằng cách chỉ định
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186050
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 77
Lưu ý rằng
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186051 hiệu quả hơn
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186052, vì vậy nếu kết quả của hàm tổng hợp chỉ thú vị trên một cột [ở đây
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186053], nó có thể được lọc trước khi áp dụng hàm tổng hợp
Ghi chú
Bất kỳ cột đối tượng nào, kể cả nếu nó chứa các giá trị số như đối tượng
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186054, đều được coi là cột "phiền toái". Chúng được tự động loại trừ khỏi các chức năng tổng hợp trong groupby
Nếu bạn muốn bao gồm các cột thập phân hoặc cột đối tượng trong một tập hợp với các kiểu dữ liệu không phiền toái khác, bạn phải làm như vậy một cách rõ ràng
Cảnh báo
Tính năng tự động loại bỏ các cột phiền toái đã không còn được dùng nữa và sẽ bị xóa trong phiên bản tương lai của pandas. Nếu các cột được bao gồm mà không thể thao tác được, thay vào đó, gấu trúc sẽ gây ra lỗi. Để tránh điều này, hãy chọn các cột bạn muốn thao tác hoặc chỉ định
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186050
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 78
Xử lý các giá trị Phân loại [không] được quan sát
Khi sử dụng nhóm cá mú
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186056 [với tư cách là một nhóm duy nhất hoặc là một phần của nhiều nhóm], từ khóa
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186057 kiểm soát việc trả về tích cartesian của tất cả các giá trị nhóm có thể có [
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186058] hay chỉ những giá trị được quan sát của nhóm [
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186059]
Hiển thị tất cả các giá trị
In [21]: df2 = pd.DataFrame[{"X": ["B", "B", "A", "A"], "Y": [1, 2, 3, 4]}] In [22]: df2.groupby[["X"]].sum[] Out[22]: Y X A 7 B 3 In [23]: df2.groupby[["X"], sort=False].sum[] Out[23]: Y X B 3 A 79
Chỉ hiển thị các giá trị được quan sát
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 20
dtype được trả về của nhóm sẽ luôn bao gồm tất cả các danh mục đã được nhóm
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 21
Xử lý nhóm NA và NaT
Nếu có bất kỳ giá trị NaN hoặc NaT nào trong khóa nhóm, chúng sẽ tự động bị loại trừ. Nói cách khác, sẽ không bao giờ có “nhóm NA” hay “nhóm NaT”. Đây không phải là trường hợp trong các phiên bản gấu trúc cũ hơn, nhưng người dùng thường loại bỏ nhóm NA [và hỗ trợ nó là một vấn đề đau đầu khi triển khai]
Nhóm với các yếu tố được sắp xếp
Các biến phân loại được biểu diễn dưới dạng thể hiện của lớp
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186056 của gấu trúc có thể được sử dụng làm khóa nhóm. Nếu vậy, thứ tự của các cấp độ sẽ được giữ nguyên
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 22
Nhóm với một đặc điểm kỹ thuật cá mú
Bạn có thể cần chỉ định thêm một chút dữ liệu để nhóm chính xác. Bạn có thể sử dụng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]36 để cung cấp điều khiển cục bộ này
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 23
Nhóm một cột cụ thể với tần suất mong muốn. Điều này giống như lấy mẫu lại
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 24
Bạn có một thông số kỹ thuật không rõ ràng ở chỗ bạn có một chỉ mục được đặt tên và một cột có thể là các nhóm tiềm năng
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 25
Lấy hàng đầu tiên của mỗi nhóm
Giống như đối với DataFrame hoặc Sê-ri, bạn có thể gọi đầu và đuôi trên một nhóm
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 26
Điều này hiển thị n hàng đầu tiên hoặc cuối cùng từ mỗi nhóm
Lấy hàng thứ n của mỗi nhóm
Để chọn từ DataFrame hoặc Sê-ri mục thứ n, hãy sử dụng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]63. Đây là phương pháp rút gọn và sẽ trả về một hàng [hoặc không có hàng] cho mỗi nhóm nếu bạn chuyển một int cho n
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 27
Nếu bạn muốn chọn mục không null thứ n, hãy sử dụng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]26 kwarg. Đối với Khung dữ liệu, điều này phải là
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186064 hoặc
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186065 giống như bạn sẽ chuyển đến dropna
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 28
Cũng như các phương pháp khác, vượt qua
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]52, sẽ đạt được quá trình lọc, trả về hàng được nhóm
In [24]: df3 = pd.DataFrame[{"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]}] In [25]: df3.groupby[["X"]].get_group["A"] Out[25]: X Y 0 A 1 2 A 3 In [26]: df3.groupby[["X"]].get_group["B"] Out[26]: X Y 1 B 4 3 B 29
Bạn cũng có thể chọn nhiều hàng từ mỗi nhóm bằng cách chỉ định nhiều giá trị thứ n dưới dạng danh sách các số nguyên
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 20
Liệt kê các mục nhóm
Để xem thứ tự xuất hiện của mỗi hàng trong nhóm của nó, hãy sử dụng phương pháp
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186067
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 21
liệt kê các nhóm
Để xem thứ tự của các nhóm [trái ngược với thứ tự của các hàng trong một nhóm được cung cấp bởi
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186067], bạn có thể sử dụng _____11_______69
Lưu ý rằng các số được cung cấp cho các nhóm khớp với thứ tự mà các nhóm sẽ được nhìn thấy khi lặp qua đối tượng nhóm, không phải thứ tự chúng được quan sát lần đầu tiên
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 22
âm mưu
Groupby cũng hoạt động với một số phương pháp vẽ đồ thị. Ví dụ: giả sử chúng tôi nghi ngờ rằng một số tính năng trong DataFrame có thể khác nhau theo nhóm, trong trường hợp này, các giá trị trong cột 1 trong đó nhóm là “B” trung bình cao hơn 3
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 23
Chúng ta có thể dễ dàng hình dung điều này với một boxplot
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 24
Kết quả của việc gọi
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186070 là một từ điển có khóa là các giá trị của cột nhóm của chúng tôi
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186071 [“A” và “B”]. Các giá trị của từ điển kết quả có thể được kiểm soát bởi từ khóa
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186072 của
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186070. Xem để biết thêm
Cảnh báo
Vì lý do lịch sử,
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186074 không tương đương với
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186075. Xem để được giải thích
Các cuộc gọi chức năng đường ống
Tương tự như chức năng được cung cấp bởi
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]05 và
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]03, các hàm nhận các đối tượng
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]32 có thể được xâu chuỗi lại với nhau bằng cách sử dụng phương thức
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186079 để cho phép cú pháp rõ ràng hơn, dễ đọc hơn. Để đọc về
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186080 nói chung, xem
Kết hợp
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186081 và
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186080 thường hữu ích khi bạn cần sử dụng lại các đối tượng GroupBy
Ví dụ: hãy tưởng tượng có một Khung dữ liệu với các cột cho cửa hàng, sản phẩm, doanh thu và số lượng đã bán. Chúng tôi muốn tính giá theo nhóm [tôi. e. doanh thu/số lượng] trên mỗi cửa hàng và trên mỗi sản phẩm. Chúng ta có thể thực hiện điều này trong một thao tác gồm nhiều bước, nhưng việc thể hiện nó dưới dạng đường ống có thể làm cho mã dễ đọc hơn. Đầu tiên chúng tôi thiết lập dữ liệu
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 25
Bây giờ, để tìm giá cho mỗi cửa hàng/sản phẩm, chúng ta chỉ cần làm
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 26
Đường ống cũng có thể mang tính biểu cảm khi bạn muốn phân phối một đối tượng được nhóm cho một số chức năng tùy ý, chẳng hạn
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 27
trong đó
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]85 lấy một đối tượng GroupBy và tìm giá trị trung bình của các cột Doanh thu và Số lượng tương ứng cho từng kết hợp Sản phẩm-Cửa hàng. Hàm
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]85 có thể là bất kỳ hàm nào nhận đối tượng GroupBy;
ví dụ
Tập hợp lại theo yếu tố
Nhóm lại các cột của DataFrame theo tổng của chúng và tính tổng các cột được tổng hợp
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 28
Hệ số hóa nhiều cột
Bằng cách sử dụng
In [6]: df = pd.DataFrame[ ...: { ...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], ...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"], ...: "C": np.random.randn[8], ...: "D": np.random.randn[8], ...: } ...: ] ...: In [7]: df Out[7]: A B C D 0 foo one 0.469112 -0.861849 1 bar one -0.282863 -2.104569 2 foo two -1.509059 -0.494929 3 bar three -1.135632 1.071804 4 foo two 1.212112 0.721555 5 bar two -0.173215 -0.706771 6 foo one 0.119209 -1.039575 7 foo three -1.044236 0.27186069, chúng tôi có thể trích xuất thông tin về các nhóm theo cách tương tự [như được mô tả thêm trong phần ] nhưng áp dụng tự nhiên cho nhiều cột thuộc loại hỗn hợp và các nguồn khác nhau. Điều này có thể hữu ích như một bước trung gian giống như phân loại trong quá trình xử lý, khi mối quan hệ giữa các hàng trong nhóm quan trọng hơn nội dung của chúng hoặc làm đầu vào cho một thuật toán chỉ chấp nhận mã hóa số nguyên. [Để biết thêm thông tin về hỗ trợ trong pandas cho dữ liệu phân loại đầy đủ, hãy xem và. ]
In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] In [28]: df_dropna = pd.DataFrame[df_list, columns=["a", "b", "c"]] In [29]: df_dropna Out[29]: a b c 0 1 2.0 3 1 1 NaN 4 2 2 1.0 3 3 1 2.0 29
Nhóm theo bộ chỉ mục để 'lấy mẫu lại' dữ liệu
Lấy mẫu lại tạo ra các mẫu giả thuyết mới [mẫu lại] từ dữ liệu đã quan sát hiện có hoặc từ một mô hình tạo dữ liệu. Những mẫu mới này tương tự như những mẫu đã có từ trước
Để lấy mẫu lại để hoạt động trên các chỉ số không giống với thời gian, có thể sử dụng quy trình sau
Trong các ví dụ sau, df. chỉ mục // 5 trả về một mảng nhị phân được sử dụng để xác định những gì được chọn cho thao tác nhóm
Ghi chú
Ví dụ dưới đây cho thấy cách chúng tôi có thể giảm mẫu bằng cách hợp nhất các mẫu thành ít mẫu hơn. Ở đây bằng cách sử dụng df. chỉ mục // 5, chúng tôi đang tổng hợp các mẫu trong thùng. Bằng cách áp dụng hàm std[], chúng tôi tổng hợp thông tin có trong nhiều mẫu thành một tập hợp con nhỏ các giá trị là độ lệch chuẩn của chúng, do đó làm giảm số lượng mẫu
In [1]: df = pd.DataFrame[ ...: [ ...: ["bird", "Falconiformes", 389.0], ...: ["bird", "Psittaciformes", 24.0], ...: ["mammal", "Carnivora", 80.2], ...: ["mammal", "Primates", np.nan], ...: ["mammal", "Carnivora", 58], ...: ], ...: index=["falcon", "parrot", "lion", "monkey", "leopard"], ...: columns=["class", "order", "max_speed"], ...: ] ...: In [2]: df Out[2]: class order max_speed falcon bird Falconiformes 389.0 parrot bird Psittaciformes 24.0 lion mammal Carnivora 80.2 monkey mammal Primates NaN leopard mammal Carnivora 58.0 # default is axis=0 In [3]: grouped = df.groupby["class"] In [4]: grouped = df.groupby["order", axis="columns"] In [5]: grouped = df.groupby[["class", "order"]]00
Trả lại một Sê-ri để truyền bá tên
Nhóm các cột DataFrame, tính toán một tập hợp các chỉ số và trả về một Chuỗi có tên. Tên sê-ri được sử dụng làm tên cho chỉ mục cột. Điều này đặc biệt hữu ích khi kết hợp với các hoạt động định hình lại chẳng hạn như xếp chồng trong đó tên chỉ mục cột sẽ được sử dụng làm tên của cột được chèn