📜  如何在 Pandas DataFrame 中的组中应用函数?(1)

📅  最后修改于: 2023-12-03 15:38:22.320000             🧑  作者: Mango

如何在 Pandas DataFrame 中的组中应用函数?

在 Pandas 中,我们可以使用 groupby 方法对 DataFrame 进行分组操作,然后在每个组中应用一个函数,常常用于数据的聚合、转换等操作。

分组操作

首先,我们可以使用 groupby 方法对 DataFrame 进行分组。该方法接收一个或多个用于分组的列名,并返回一个 DataFrameGroupBy 对象,我们可以在这个对象上进行各种操作。

import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
    'C': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [9, 8, 7, 6, 5, 4, 3, 2]
})

# 按 A 列分组
grouped = df.groupby('A')
应用函数

接下来,我们可以在每个组中应用一个函数。常用的函数有 sum、mean、agg 等,也可以自定义一个函数进行应用。

# 对每个组应用 sum 函数
result = grouped.sum()

# 对每个组应用自定义的函数并返回结果
def my_func(x):
    return x.max() - x.min()

result = grouped.agg(my_func)

在上面的例子中,我们首先按 A 列对 DataFrame 进行了分组,然后分别应用了 sum 和自定义的函数 my_func。

返回结果

最后,返回的结果是一个 DataFrame,其中包含了每个组的结果。在应用一些函数时,也可以指定要对哪些列进行计算。

# 指定要对 C 列进行计算
result = grouped['C'].sum()

除了标量值之外,还可以返回如 Series、DataFrame 等对象。

# 返回 Series
result = grouped['C'].apply(lambda x: x.max() - x.min())

# 返回 DataFrame
result = grouped[['C', 'D']].apply(lambda x: x.mean())

这些都是非常常见的操作,可以在实际的数据处理中灵活运用。