pandas.core.groupby.SeriesGroupBy.transform#

SeriesGroupBy.transform(func, *args, engine=None, engine_kwargs=None, **kwargs)[源代码]#

调用在每个组上生成类似索引的Series的函数,并返回一个具有与原始对象相同的索引的Series,该对象填充了转换后的值。

参数
f功能

函数应用于每个组。

还可以接受Numba JIT函数 engine='numba' 指定的。

如果 'numba' 选择引擎,则该函数必须是用户定义的函数 valuesindex 分别作为函数签名中的第一个和第二个参数。每个组的索引将被传递给用户定义的函数,并且可以选择使用。

在 1.1.0 版更改.

*args

要传递给函数的位置参数。

engine字符串,默认为无
  • 'cython' :从cython通过C扩展运行函数。

  • 'numba' :通过来自Numba的JIT编译代码运行函数。

  • None : Defaults to 'cython' or the global setting compute.use_numba

1.1.0 新版功能.

engine_kwargsDict,默认无
  • 'cython' 发动机,有没有接受 engine_kwargs

  • 'numba' 发动机,发动机可以接受 nopythonnogilparallel 词典的关键字。这些值必须是 TrueFalse 。默认设置 engine_kwargs 对于 'numba' 引擎是 {{'nopython': True, 'nogil': False, 'parallel': False}} 并将应用于该函数

1.1.0 新版功能.

**kwargs

要传递给函数的关键字参数。

退货
系列

参见

Series.groupby.apply

应用函数 func 分组并将结果合并在一起。

Series.groupby.aggregate

使用指定轴上的一个或多个操作进行聚合。

Series.transform

打电话 func 关于自己产生与自己具有相同轴形的级数。

注意事项

每个组都被赋予了‘name’属性,以防您需要知道您正在处理的是哪个组。

当前的实现对f提出了三个要求:

  • F必须返回一个与输入子帧具有相同形状的值,或者可以广播到输入子帧的形状。例如,如果 f 返回一个标量,它将被广播以具有与输入子帧相同的形状。

  • 如果这是DataFrame,则f必须在子框中逐列支持应用程序。如果f还支持应用到整个子帧,则从第二块开始使用快速路径。

  • F不得使基团发生突变。不支持突变,可能会产生意外结果。看见 使用用户定义函数(UDF)方法进行变异 了解更多详细信息。

在使用时 engine='numba' ,在内部不会有“后退”的行为。组数据和组索引将作为NumPy数组传递给JITed用户定义函数,不会尝试其他执行尝试。

在 1.3.0 版更改: 结果数据类型将反映传递的 func ,请参见下面的示例。

示例

>>> df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
...                           'foo', 'bar'],
...                    'B' : ['one', 'one', 'two', 'three',
...                           'two', 'two'],
...                    'C' : [1, 5, 5, 2, 5, 5],
...                    'D' : [2.0, 5., 8., 1., 2., 9.]})
>>> grouped = df.groupby('A')
>>> grouped.transform(lambda x: (x - x.mean()) / x.std())
          C         D
0 -1.154701 -0.577350
1  0.577350  0.000000
2  0.577350  1.154701
3 -1.154701 -1.000000
4  0.577350 -0.577350
5  0.577350  1.000000

播报改造结果

>>> grouped.transform(lambda x: x.max() - x.min())
   C    D
0  4  6.0
1  3  8.0
2  4  6.0
3  3  8.0
4  4  6.0
5  3  8.0

在 1.3.0 版更改: 结果数据类型将反映传递的 func ,例如:

>>> grouped[['C', 'D']].transform(lambda x: x.astype(int).max())
   C  D
0  5  8
1  5  9
2  5  8
3  5  9
4  5  8
5  5  9