Pandas教程-Pandas DataFrame.groupby()
简介
Pandas是一个著名的Python库,用于数据处理和分析。它提供了处理数据结构(如数据框和系列)的强大而灵活的方法。Pandas的一个关键特性是使用groupby()
方法根据一个或多个变量对数据进行分组。在本文中,我们将探讨如何使用groupby()
方法来分析和处理数据。
Pandas中的groupby()是什么?
Pandas中的groupby()
方法是一个强大的工具,允许您根据一个或多个变量对数据进行分组。它用于将大型数据框拆分为基于明确变量(例如列名)的更小的组,然后分别对每个组应用聚合操作。这使您能够独立分析和比较数据的子集。
语法:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
Groupby的参数:
by:
- 映射、函数、字符串或可迭代对象
其主要任务是确定groupby
中的分组方式。如果我们将by
作为函数使用,则它会在对象索引的每个值上调用。如果传递字典或Series,则将使用其值确定分组。如果传递ndarray,则将使用值本身确定分组。我们还可以通过传递标签或标签列表按列进行分组。
axis:
- {0或'index',1或'columns'},默认值为0
level:
- 整数、级别名称或级别序列,默认值为None。
当轴是MultiIndex(分层结构)时,将按特定级别或级别进行分组。
as_index:
- 布尔值,默认为True
它返回带有聚合输出的组标签的对象作为索引。
sort:
- 布尔值,默认为True
用于对分组键进行排序。关闭此选项可以获得更好的性能。它不影响每个组内观察的顺序。Groupby保留每个组内行的顺序。
group_keys:
- 布尔值,默认值为True
当我们调用它时,它会将分组键添加到索引中以标识各个分组。
observed:
- 布尔值,默认值为False
仅在任何分组器为分类时才使用。如果值为True,则仅显示分类分组器的观察值。否则,将显示所有其值。
**kwargs:
这是一个可选参数,仅接受关键字参数'mutated',该参数传递给groupby。
返回值
它返回DataFrameGroupBy或SeriesGroupBy。返回值取决于调用对象,其中包含有关组的信息。
Groupby操作
此操作包括以下步骤以聚合/分组数据:
- 拆分数据集
- 分析数据
- 聚合或组合数据
注意:Groupby操作的结果不是DataFrame,而是DataFrame对象的字典。
将数据拆分为组
Groupby拆分是数据分析中用于根据一个或多个变量将数据分组到子集的方法。基本思想是根据特定变量将数据集分成组,然后对每个组单独执行某种分析或计算。这个过程在统计分析和人工智能中经常被使用,以及在数据可视化和探索性数据分析中也经常被使用。
- groupby拆分的过程通常包括以下步骤:
- 选择一个或多个要根据其进行数据分组的变量。
- 根据这些变量的值将数据分成独立的组。
- 对每个组单独执行某种分析或计算。将每个组的结果合并以产生最终的数据列表。
有多种方法可以将任何对象拆分为组,包括:
- obj.groupby('key')
- obj.groupby(['key1', 'key2'])
- obj.groupby(key, axis=1)
我们还可以向每个子集添加一些功能。应用功能可以执行以下操作:
- 聚合: 计算摘要统计量。
- 转换: 执行一些特定于组的操作。
- 过滤: 通过舍弃满足某些条件的数据来过滤数据。
聚合
它被定义为返回每个组的单个聚合值的函数。在创建groupby对象时,可以在分组的数据上执行多种聚合操作。聚合是数据分析中的一种强大方法,它涉及将数据集中的各个值连接起来,以获取摘要统计信息,有助于获得洞察并做出明智的决策。可以对数据框中的单个变量或多个变量执行聚合。
Pandas提供了一系列广泛的函数,用于执行聚合任务,包括mean()、sum()、count()、min()、max()、median()、var()和std()等。这些函数可以应用于DataFrame中的单个列或列组。
示例
# import the pandas library
import pandas as pd
import numpy as np
data = {'Name': ['Parker', 'Smith', 'John', 'William'],
'Percentage': [82, 98, 91, 87],
'Course': ['B.Sc','B.Ed','M.Phill','BA']}
df = pd.DataFrame(data)
grouped = df.groupby('Course')
print(grouped['Percentage'].agg(np.mean))
输出
Course
B.Ed 98
B.Sc 82
BA 87
M.Phill 91
Name: Percentage, dtype: int64
转换
它是对组或列进行操作,执行一些特定于组的计算,并返回一个与组大小相同的对象。在Pandas中,转换包括对DataFrame中的列或列组应用函数,以修改数据,通常是为了标准化或缩放。Pandas提供了transform()
方法,该方法对groupby对象的每个组应用函数,并返回原始DataFrame的转换版本。transform()
方法可用于执行各种转换,包括规范化数据、缩放数据和填充缺失值。
示例
# import the pandas library
import pandas as pd
import numpy as np
data = {'Name': ['Parker', 'Smith', 'John', 'William'],
'Percentage': [82, 98, 91, 87],
'Course': ['B.Sc','B.Ed','M.Phill','BA']}
df = pd.DataFrame(data)
grouped = df.groupby('Course')
Percentage = lambda x: (x - x.mean()) / x.std()*10
print(grouped.transform(Percentage))
输出
Percentage
0 NaN
1 NaN
2 NaN
3 NaN
过滤
filter()函数通过定义一些条件对数据进行过滤,并返回数据的子集。在Pandas中,过滤是根据一些条件或模型从DataFrame中选择一些行的最常见方法。该过程包括过滤不满足指定条件的行,并保留满足条件的行。
Pandas提供了几种过滤方法,包括布尔索引、query()和filter()。这些方法允许我们根据各种标准过滤DataFrame的行,例如列值、索引标签或涉及多列的条件。
示例
# import the pandas library
import pandas as pd
import numpy as np
data = {'Name': ['Parker', 'Smith', 'John', 'William'],
'Percentage': [82, 98, 91, 87],
'Course': ['B.Sc','B.Ed','M.Phill','BA']}
df = pd.DataFrame(data)
grouped = df.groupby('Course')
print (df.groupby('Course').filter(lambda x: len(x) >= 1))
输出
Name Percentage Course
0 Parker 82 B.Sc
1 Smith 98 B.Ed
2 John 91 M.Phill
3 William 87 BA
示例
import pandas as pd
info = pd.DataFrame({'Name': ['Parker', 'Smith','John', 'William'],'Percentage': [92., 98., 89., 86.]})
info
输出
# import the pandas library
import pandas as pd
data = {'Name': ['Parker', 'Smith', 'John', 'William'],
'Percentage': [82, 98, 91, 87],}
info = pd.DataFrame(data)
print (info)
输出
Name Percentage
0 Parker 82
1 Smith 98
2 John 91
3 William 87
结论:
在本文中,我们介绍了Pandas中的groupby()
方法以及如何使用它根据一个或多个变量对数据进行分组。我们了解了如何对组应用函数,包括使用agg()
方法应用多个函数。我们还了解了如何使用带有groupby()
的条件表达式创建更明确的组。通过groupby()
方法,您可以以强大而灵活的方式分析和处理数据。