在Pandas的groupby中,"transform"和"aggregate"是两个常用的操作。它们都用于对数据进行分组计算,但在具体的实现和结果上有所不同。 "Transform"操作会将每个分组的计算结果应用到原始数据的每一行上,返回一个与原始数据相同大小的结果。这意味着每一行都会被分组计算所影响,而不会改变数据的形状。 相比之下,"Aggregate"操作会将每个分组的计算结果应用到整个分组上,返回一个汇总的结果。这意味着数据的形状可能会发生变化,例如通过计算平均值、求和等操作得到一个单一的值。 因此,如果你想要对每一行进行分组计算并保持数据的形状不变,可以使用"transform"操作。而如果你想要对整个分组进行汇总计算并得到一个单一的结果,可以使用"aggregate"操作。

43
当对Pandas DataFrame进行分组时,我应该何时使用transform,何时使用aggregate?它们在实际应用中有何不同,你认为哪个更重要?
1个回答

84

考虑数据框 df

df = pd.DataFrame(dict(A=list('aabb'), B=[1, 2, 3, 4], C=[0, 9, 0, 9]))

enter image description here


groupby是标准的聚合使用方式。

df.groupby('A').mean()

enter image description here


如果您想要在整个组中广播这些值,并返回与原始索引相同的内容,
请使用transform

df.groupby('A').transform('mean')

输入图像描述

df.set_index('A').groupby(level='A').transform('mean')

agg用于在不同列上运行特定的操作或在同一列上运行多个操作。

enter image description here


df.groupby('A').agg(['mean', 'std'])

输入图像描述

df.groupby('A').agg(dict(B='sum', C=['mean', 'prod']))

输入图像描述


8
非常惊人的回答! - mathopt
2
通过使用 agg,我如何将聚合后的列还原为原始数据框 df - MAC
使用 transform 来拆分列。@MAC - Chris Coffee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接