如何在Pandas中按组计算观察值
在真正的数据科学项目中,你会处理大量的数据,并反复尝试一些东西,所以为了提高效率,我们使用Groupby概念。Groupby概念真的很重要,因为它能够有效地聚合数据,无论是性能还是代码量都很宏大。Groupby主要指的是一个涉及以下一个或多个步骤的过程,它们是。
- 分割。这是一个过程,我们通过对数据集施加一些条件,将数据分成若干组。
- 应用。这是一个过程,我们将一个函数独立地应用于每一组。
- 合并。这是一个过程,我们在应用groupby后将不同的数据集结合起来,并将结果纳入一个数据结构。
语法: groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
参数 :
- by:映射、函数、字符串或可迭代。
- axis : int, default 0
- level : 如果轴是一个多指标(分层的),按一个或多个特定的级别分组。
- as_index : 对于聚合输出,返回以组标签为索引的对象。只与DataFrame输入有关。 as_index=False实际上是 “SQL风格 “的分组输出。
- sort : 对组键进行排序。通过关闭这个功能可以获得更好的性能。注意这并不影响每组中观察值的顺序。groupby保留了每组中的行的顺序。
- group_keys : 当调用apply时,将组键添加到索引中,以识别碎片。
- 挤压:如果可能的话,降低返回类型的维度,否则返回一个一致的类型
返回: GroupBy对象
在这里,我们使用一个简单的虚拟数据框架,如下图所示。
此外,我们还使用了一些方法来计算Pandas中各组的观察值,下面用例子来说明。
例子1:使用group.count(按一个变量计数)
在这个例子中,我们将使用group.count()方法来计算每个组中成员的总数。
# import libraries
import pandas as pd
#create pandas DataFrame
df = pd.DataFrame({'Name': ['Arun', 'Arun', 'Bhuvi', 'Bhuvi',
'Bhuvi', 'Chandan', 'Chandan'],
'Department':['CSE', 'IT', 'CSE', 'CSE',
'IT', 'IT', 'CSE'],
'Funds': [1100, 800, 700, 600, 600, 500, 1200]})
# create a group using groupby
group = df.groupby("Department")
# count the observations
group.count()
输出:
例子2:使用group.size(按多个变量计数)
在这个例子中,我们将使用group.size()方法来计算每个组中的条目/行数。
# import libraries
import pandas as pd
#create pandas DataFrame
df = pd.DataFrame({'Name': ['Arun', 'Arun', 'Bhuvi', 'Bhuvi',
'Bhuvi', 'Chandan', 'Chandan'],
'Department':['CSE', 'IT', 'CSE', 'CSE',
'IT', 'IT', 'CSE'],
'Funds': [1100, 800, 700, 600, 600, 500, 1200]})
# create a group using groupby
group = df.groupby(['Name', 'Department'])
# size of group to count observations
group = group.size()
# make a column name
group.reset_index(name='Observation')
输出 :