pandas.core.groupby.SeriesGroupBy.transform#
- SeriesGroupBy.transform(func, *args, engine=None, engine_kwargs=None, **kwargs)[源代码][源代码]#
在每个组上调用生成相同索引序列的函数。
返回一个与原始对象具有相同索引的系列,填充了转换后的值。
- 参数:
- 函数函数, 字符串
应用于每个组的函数。有关要求,请参见下面的“备注”部分。
接受的输入是:
字符串
Python 函数
指定
engine='numba'
的 Numba JIT 函数。
此引擎仅支持传递单个函数。如果选择了
'numba'
引擎,该函数必须是用户定义的函数,并且在函数签名中values
和index
分别作为第一个和第二个参数。每个组的索引将被传递给用户定义的函数,并可选择用于使用。如果选择了一个字符串,那么它需要是你想要使用的 groupby 方法的名称。
- *args
传递给 func 的位置参数。
- 引擎str, 默认为 None
'cython'
: 通过cython的C扩展运行函数。'numba'
: 通过来自 numba 的 JIT 编译代码运行函数。None
: 默认为'cython'
或全局设置compute.use_numba
- engine_kwargs字典, 默认为 None
对于
'cython'
引擎,没有接受的engine_kwargs
对于
'numba'
引擎,引擎可以接受nopython
、nogil
和parallel
字典键。值必须是True
或False
。'numba'
引擎的默认engine_kwargs
是{'nopython': True, 'nogil': False, 'parallel': False}
,并将应用于函数。
- **kwargs
要传递给 func 的关键字参数。
- 返回:
- 系列
与原始对象具有相同索引的序列,填充了转换后的值。
参见
Series.groupby.apply
按组应用函数
func
并将结果合并在一起。Series.groupby.aggregate
使用一个或多个操作进行聚合。
Series.transform
在自身上调用
func
,生成一个与自身轴形状相同的 Series。
备注
每个组都被赋予了 ‘name’ 属性,以防你需要知道你正在处理哪个组。
当前的实现对 f 施加了三个要求:
f 必须返回一个值,该值要么与输入子帧具有相同的形状,要么可以广播到输入子帧的形状。例如,如果 f 返回一个标量,它将被广播以具有与输入子帧相同的形状。
如果这是一个 DataFrame,f 必须支持在子数据框中逐列应用。如果 f 还支持在整个子数据框中应用,那么从第二个块开始使用快速路径。
f 不得变异组。变异是不支持的,并且可能会产生意外的结果。更多详情请参见 使用用户定义函数 (UDF) 方法进行变异。
当使用
engine='numba'
时,内部不会有“回退”行为。组数据和组索引将作为 numpy 数组传递给 JITed 用户定义函数,并且不会尝试其他执行方式。在 1.3.0 版本发生变更: 生成的 dtype 将反映传递的
func
的返回值,请参见下面的示例。在 2.0.0 版本发生变更: 在使用
.transform
对分组 DataFrame 进行操作时,如果转换函数返回一个 DataFrame,pandas 现在会将结果的索引与输入的索引对齐。你可以在转换函数的结果上调用.to_numpy()
以避免对齐。例子
>>> ser = pd.Series([390.0, 350.0, 30.0, 20.0], ... index=["Falcon", "Falcon", "Parrot", "Parrot"], ... name="Max Speed") >>> grouped = ser.groupby([1, 1, 2, 2]) >>> grouped.transform(lambda x: (x - x.mean()) / x.std()) Falcon 0.707107 Falcon -0.707107 Parrot 0.707107 Parrot -0.707107 Name: Max Speed, dtype: float64
广播转换的结果
>>> grouped.transform(lambda x: x.max() - x.min()) Falcon 40.0 Falcon 40.0 Parrot 10.0 Parrot 10.0 Name: Max Speed, dtype: float64
>>> grouped.transform("mean") Falcon 370.0 Falcon 370.0 Parrot 25.0 Parrot 25.0 Name: Max Speed, dtype: float64
在 1.3.0 版本发生变更.
生成的 dtype 将反映传递的
func
的返回值,例如:>>> grouped.transform(lambda x: x.astype(int).max()) Falcon 390 Falcon 390 Parrot 30 Parrot 30 Name: Max Speed, dtype: int64