Pandas 中的 Groupby 索引列

Luqman Khan 2023年1月30日
  1. 在 Python Pandas 中使用 groupby() 函数按索引列分组
  2. 在 Python Pandas 中对 CSV 文件数据使用 groupby() 函数
Pandas 中的 Groupby 索引列

本教程介绍 Python Pandas 中的 groupby 如何对数据进行分类并将函数应用于类别。使用 groupby() 函数通过示例对 Pandas 中的多个索引列进行分组。

在 Python Pandas 中使用 groupby() 函数按索引列分组

在这篇文章中,Pandas DataFrame data.groupby() 函数根据特定标准将数据分组。Pandas 对象可以沿任意轴分为任意数量的组。

标签到组名的映射是分组的抽象定义。groupby 操作拆分对象、应用函数并组合结果。

这对于对大量数据进行分组和执行操作很有用。Pandas groupby 默认行为将 groupby 列转换为索引,并将它们从 DataFrame 的列列表中删除。

语法:

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

参数:

by 映射、函数、字符串或可迭代对象
axis 整数,默认值 0
level 对于多索引轴,按特定级别或级别(分层)分组。
as_index 作为聚合输出的索引,返回一个带有组标签的对象。这仅适用于 DataFrame 输入。当 index=False 时,输出以 SQL 样式分组。
sort 应该对组中的键进行排序。将其关闭以提高性能。应该注意的是,每组内的观察顺序不受此影响。Groupby 维护每个组内的行顺序。
group_keys 调用 apply 时将组键添加到索引以识别碎片挤压:如果可能,减少返回类型的维数;否则,返回一致的类型。

取一个包含两列的 DataFrame:dateitem sellGroupby 日期和项目销售并获取用户的逐项计数。

首先,我们需要导入必要的库 pandasnumpy,创建三个列 ctdateitem_sell 并将一组值传递给这些列。

import pandas as pd
import numpy as np

data = pd.DataFrame()
data["date"] = ["a", "a", "a", "b"]
data["item_sell"] = ["z", "z", "a", "a"]
data["ct"] = 1
print(data)

输出:

  date item_sell  ct
0    a         z   1
1    a         z   1
2    a         a   1
3    b         a   1

使用 dateitem_sell 列进行分组。

import pandas as pd
import numpy as np

data = pd.DataFrame()
data["date"] = ["a", "a", "a", "b"]
data["item_sell"] = ["z", "z", "a", "a"]
data["ct"] = 1
output = pd.pivot_table(data, values="ct", index=["date", "item_sell"], aggfunc=np.sum)
print(output)

输出:

 				ct
date item_sell
a    a           1
     z           2
b    a           1

groupby() by 参数现在可以引用列名称或索引级别名称。

import pandas as pd
import numpy as np

arrays = [
    ["rar", "raz", "bal", "bac", "foa", "foa", "qus", "qus"],
    ["six", "seven", "six", "seven", "six", "seven", "six", "seven"],
]
index = pd.MultiIndex.from_arrays(arrays, names=["first", "second"])
data = pd.DataFrame({"C": [1, 1, 1, 1, 2, 2, 3, 3], "D": np.arange(8)}, index=index)
print(data)

输出:

              C  D
first second
rar   six     1  0
raz   seven   1  1
bal   six     1  2
bac   seven   1  3
foa   six     2  4
      seven   2  5
qus   six     3  6
      seven   3  7

secondC 分组,然后使用 sum 函数计算总和。

import pandas as pd
import numpy as np

arrays = [
    ["rar", "raz", "bal", "bac", "foa", "foa", "qus", "qus"],
    ["six", "seven", "six", "seven", "six", "seven", "six", "seven"],
]
index = pd.MultiIndex.from_arrays(arrays, names=["first", "second"])
data = pd.DataFrame({"C": [1, 1, 1, 1, 2, 2, 3, 3], "D": np.arange(8)}, index=index)
output = data.groupby(["second", "C"]).sum()
print(output)

输出:

按秒分组

在 Python Pandas 中对 CSV 文件数据使用 groupby() 函数

现在对 CSV 文件使用 groupby() 函数。要下载代码中使用的 CSV 文件,请单击此处([学生在考试中的表现 | Kaggle])。

使用的 CSV 文件是关于学生表现的。要根据 gender 对数据进行分组,请使用 groupby() 函数。

Python Pandas 库的 read_csv 函数用于从驱动器中读取文件。将文件存储在数据变量中。

import pandas as pd

data = pd.read_csv("/content/drive/MyDrive/CSV/StudentsPerformance.csv")
print(data)

输出:

CSV 文件的数据集

应用 groupby() 函数。

import pandas as pd

data = pd.read_csv("StudentsPerformance.csv")
std = data.groupby("gender")
print(std.first())

按性别分组

让我们打印任何组中的值。为此,请使用团队的名称。

get_group 函数用于查找任何组中的条目。找出 female 组中包含的值。

import pandas as pd

data = pd.read_csv("StudentsPerformance.csv")
std = data.groupby("gender")
print(std.get_group("female"))

输出:

按女性值设置组

使用 groupby() 函数创建多个类别组。要拆分,请使用多个列。

import pandas as pd

data = pd.read_csv("StudentsPerformance.csv")
std_per = data.groupby(["gender", "lunch"])
print(std_per.first())

输出:

按性别分组午餐

Groupby() 是一个具有多种变体的通用函数。它使得根据某些标准拆分 DataFrame 变得非常简单和高效。

相关文章 - Pandas Groupby