Pandas DataFrame DataFrame.groupby() 函式
-
pandas.DataFrame.groupby()
語法 -
示例程式碼:使用
pandas.DataFrame.groupby()
根據單列的值對兩個 DataFrame 進行分組 -
示例程式碼:使用
pandas.DataFrame.groupby()
根據多個條件對兩個 DataFrame 進行分組 -
示例程式碼:在
pandas.DataFrame.groupby()
中設定as_index=False
pandas.DataFrame.groupby()
將一個 DataFrame 作為輸入,根據給定的標準將 DataFrame 分成若干組。我們可以使用 groupby()
方法輕鬆處理大型資料集。
pandas.DataFrame.groupby()
語法
DataFrame.groupby(
by=None,
axis=0,
level=None,
as_index=True,
sort=True,
group_keys=True,
squeeze: bool=False,
observed: bool=False)
引數
by |
對映、函式、字串、標籤或可迭代的元素組 |
axis |
按行(axis=0 )或列(axis=1 )來分組 |
level |
整數,按特定級別進行分組的數值 |
as_index |
布林型。它返回一個以組標籤為索引的物件 |
sort |
布林型。它對組鍵進行排序 |
group_keys |
布林型。它將組鍵新增到索引中,以識別分組 |
squeeze |
布林型。在可能的情況下,它會減少返回的維度 |
observed |
布林型。只適用於任何分類分組,如果設定為 True ,則只顯示分類分組的觀測值 |
返回值
它返回一個 DataFrameGroupBy
物件,該物件中包含了組的資訊。
示例程式碼:使用 pandas.DataFrame.groupby()
根據單列的值對兩個 DataFrame 進行分組
import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
('Mango', 24, 'No' ) ,
('banana', 14, 'No' ) ,
('Apple', 44, 'Yes' ) ,
('Pineapple', 64, 'No') ,
('Kiwi', 84, 'Yes') ]
df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock'])
grouped_df = df.groupby('In_Stock')
print(grouped_df)
print(type(grouped_df))
輸出:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f73cc992d30>
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>
它根據 In_Stock
列中的值將 DataFrame
分組,並返回一個 DataFrameGroupBy
物件。
要想獲得 groupby()
返回的 DataFrameGroupBy
物件的詳細資訊,我們可以使用 DataFrameGroupBy
物件的 first()
方法來獲得每個組的第一個元素。
import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
('Mango', 24, 'No' ) ,
('banana', 14, 'No' ) ,
('Apple', 44, 'Yes' ) ,
('Pineapple', 64, 'No') ,
('Kiwi', 84, 'Yes') ]
df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock'])
grouped_df = df.groupby('In_Stock')
print(grouped_df.first())
輸出:
Name Price
In_Stock
No Mango 24
Yes Orange 34
它列印由從 df
分割的兩個組的第一個元素組成的 DataFrame
。
我們也可以使用 get_group()
方法列印整個組。
import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
('Mango', 24, 'No' ) ,
('banana', 14, 'No' ) ,
('Apple', 44, 'Yes' ) ,
('Pineapple', 64, 'No') ,
('Kiwi', 84, 'Yes') ]
df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock'])
grouped_df = df.groupby('In_Stock')
print(grouped_df.get_group('Yes'))
輸出:
Name Price In_Stock
0 Orange 34 Yes
3 Apple 44 Yes
5 Kiwi 84 Yes
它列印的是 df
中所有在 In_Stock
列中值為 Yes
的元素。我們首先通過 groubpy()
方法將 In_Stock
列值不同的元素分成不同的組,然後使用 get_group()
方法訪問某個特定的組。
示例程式碼:使用 pandas.DataFrame.groupby()
根據多個條件對兩個 DataFrame 進行分組
import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
('Mango', 24, 'No','ABC' ) ,
('banana', 14, 'No','ABC' ) ,
('Apple', 44, 'Yes',"XYZ" ) ,
('Pineapple', 64, 'No',"XYZ") ,
('Kiwi', 84, 'Yes',"XYZ") ]
df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock',"Supplier"])
grouped_df = df.groupby(['In_Stock', 'Supplier'])
print(grouped_df.first())
輸出:
Name Price
In_Stock Supplier
No ABC Mango 24
XYZ Pineapple 64
Yes ABC Orange 34
XYZ Apple 44
它根據 In_Stock
和 Supplier
列中的數值將 df
分組,並返回一個 DataFrameGroupBy
物件。
我們使用 first()
方法來獲取每個組的第一個元素。它返回一個由以下四個組的第一個元素組合而成的 DataFrame。
In_Stock
列No
和Supplier
列ABC
值的組。In_Stock
列No
和Supplier
列XYZ
值的組。In_Stock
列Yes
和Supplier
列ABC
值的組。In_Stock
列Yes
和Supplier
列XYZ
值的組。
當我們將多個標籤傳遞給 groupby()
函式時,由 GroupBy
物件的方法返回的 DataFrame
有一個 MultiIndex
。
print(grouped_df.first().index)
輸出:
MultiIndex(levels=[['No', 'Yes'], ['ABC', 'XYZ']],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=['In_Stock', 'Supplier'])
示例程式碼:在 pandas.DataFrame.groupby()
中設定 as_index=False
DataFrame.groupby()
方法中的 as_index
引數預設為 True
。當應用 first()
等 GroupBy
方法時,組標籤是返回的 DataFrame
的索引。
import pandas as pd
fruit_list = [
("Orange", 34, "Yes"),
("Mango", 24, "No"),
("banana", 14, "No"),
("Apple", 44, "Yes"),
("Pineapple", 64, "No"),
("Kiwi", 84, "Yes"),
]
df = pd.DataFrame(fruit_list, columns=["Name", "Price", "In_Stock"])
grouped_df = df.groupby("In_Stock", as_index=True)
firtGroup = grouped_df.first()
print(firtGroup)
print(firtGroup.index)
print("---------")
grouped_df = df.groupby("In_Stock", as_index=False)
firtGroup = grouped_df.first()
print(firtGroup)
print(firtGroup.index)
輸出:
Name Price
In_Stock
No Mango 24
Yes Orange 34
Index(['No', 'Yes'], dtype='object', name='In_Stock') In_Stock Name Price
0 No Mango 24
1 Yes Orange 34
Int64Index([0, 1], dtype='int64')
正如你所看到的,生成的 DataFrame
的索引預設為組標籤,即 as_index=True
。
當我們設定 as_index=False
時,索引就變成了自動生成的數字索引。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn