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