📜  Pandas DataFrame.Groupby

📅  最后修改于: 2020-10-29 01:58:41             🧑  作者: Mango

Pandas DataFrame.groupby()

在Pandas 中,groupby()函数使我们可以通过在实际数据集上利用它们来重新排列数据。它的主要任务是将数据分成不同的组。这些组基于一些标准进行分类。可以从任何轴划分对象。

句法:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

此操作包括以下步骤,用于汇总/分组数据:

  • 分割数据集
  • 分析数据
  • 汇总或合并数据

注意:Groupby操作的结果不是DataFrame,而是DataFrame对象的字典。

将数据分组

有多种方法可以将任何对象拆分为组,如下所示:

  • obj.groupby(‘key’)
  • obj.groupby([‘key1’,’key2’])
  • obj.groupby(key,axis = 1)

我们还可以向每个子集添加一些功能。可以对应用的功能执行以下操作:

  • Aggregation:计算摘要统计信息。
  • Transformation:它执行某些特定于组的操作。
  • Filtration:它通过在某些条件下丢弃数据来过滤数据。

Aggregations

它被定义为为每个组返回单个聚合值的函数。创建groupby对象时,我们可以对分组的数据执行多种聚合操作。

# 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

Transformations

这是对组或列执行的操作,它执行某些特定于组的计算,并返回一个索引,该对象的索引大小与组大小相同。

# 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

Filtration

filter()函数通过定义一些条件来过滤数据并返回数据的子集。

# 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

Groupby的参数:

  • by:映射,函数,str或可迭代

它的主要任务是确定groupby中的组。如果我们将by作为函数,则会在对象索引的每个值上调用它。如果通过了dict或Series,则将使用Series或dict VALUES来确定组。

如果传递了ndarray,则按原样使用这些值来确定组。

我们还可以传递标签或标签列表以按自身中的列进行分组。

  • axis: {0或’index’,1或’columns’},默认值0
  • level:整数,级别名称或此类的序列,默认值无。

当轴为MultiIndex(分层)时使用它,因此它将按一个或多个特定级别分组。

  • as_index:布尔值,默认值为True它将返回带有组标签的对象作为聚合输出的索引。
  • sort:布尔值,默认为True 。用于对组密钥进行排序。关闭此功能可获得更好的性能。

注意:它不会影响每个组中观察的顺序。 Groupby保留每个组中行的顺序。

    • group_keys:bool,默认值为True