处理分组数据时,通常需要将多个函数应用于多个列。 Pandas 库提供了多种方法来实现此目的,包括 agg 和 apply 方法。但是,这些方法有一定的局限性,可能并不总是满足特定的用例。
正如问题中提到的,可以将多个函数应用于 groupby Series使用字典的对象:
grouped['D'].agg({'result1' : np.sum, 'result2' : np.mean})
这种方法允许将列名指定为键,将相应的函数指定为值。但是,这仅适用于 Series groupby 对象。当应用于 groupby DataFrame 时,字典键应该是列名,而不是输出列名。
该问题还探讨了在 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 方法,它将整个组 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中文网其他相关文章!