首页 >后端开发 >Python教程 >如何高效地将多个函数应用于 Pandas 中的多个 GroupBy 列?

如何高效地将多个函数应用于 Pandas 中的多个 GroupBy 列?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-13 18:01:12608浏览

How Can I Efficiently Apply Multiple Functions to Multiple GroupBy Columns in Pandas?

将多个函数应用于多个 GroupBy 列

简介

处理分组数据时,通常需要将多个函数应用于多个列。 Pandas 库提供了多种方法来实现此目的,包括 agg 和 apply 方法。但是,这些方法有一定的局限性,可能并不总是满足特定的用例。

将 agg 与 Dict 一起使用

正如问题中提到的,可以将多个函数应用于 groupby Series使用字典的对象:

grouped['D'].agg({'result1' : np.sum,
                   'result2' : np.mean})

这种方法允许将列名指定为键,将相应的函数指定为值。但是,这仅适用于 Series groupby 对象。当应用于 groupby DataFrame 时,字典键应该是列名,而不是输出列名。

将 agg 与 Lambda 函数结合使用

该问题还探讨了在 agg 中使用 lambda 函数来执行基于 groupby 对象中其他列的操作。当您的函数涉及对其他列的依赖时,此方法适用。虽然 agg 方法没有明确支持,但可以通过手动将列名称指定为字符串来解决此限制:

grouped.agg({'C_sum' : lambda x: x['C'].sum(),
             'C_std': lambda x: x['C'].std(),
             'D_sum' : lambda x: x['D'].sum()},
             'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)

此方法允许将多个函数应用于不同的列,包括那些依赖于其他列的函数。但是,它可能很冗长,并且需要仔细处理列名称。

将 apply 与自定义函数一起使用

更灵活的方法是使用 apply 方法,它将整个组 DataFrame 传递给提供的功能。这允许在组内的列之间执行更复杂的操作和交互:

def f(x):
    d = {}
    d['a_sum'] = x['a'].sum()
    d['a_max'] = x['a'].max()
    d['b_mean'] = x['b'].mean()
    d['c_d_prodsum'] = (x['c'] * x['d']).sum()
    return pd.Series(d, index=['a_sum', 'a_max', 'b_mean', 'c_d_prodsum'])

df.groupby('group').apply(f)

通过返回具有适当标记的列的系列,您可以轻松地在 groupby DataFrame 上执行多个计算。这种方法更加通用,并且允许基于多个列进行复杂的操作。

结论

将多个函数应用于多个分组列需要仔细考虑数据结构和所需的操作。 agg 方法适合对 Series 对象进行简单操作,而 apply 方法在使用 groupby DataFrame 或执行复杂计算时提供更大的灵活性。

以上是如何高效地将多个函数应用于 Pandas 中的多个 GroupBy 列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn