pandas.core.groupby.DataFrameGroupBy.transform#
- DataFrameGroupBy.transform(func, *args, engine=None, engine_kwargs=None, **kwargs)[源代码]#
调用在每个组上生成类似索引的DataFrame的函数,并返回一个DataFrame,该DataFrame具有与原始对象相同的索引,其中填充了转换后的值。
- 参数
- f功能
函数应用于每个组。
还可以接受Numba JIT函数
engine='numba'
指定的。如果
'numba'
选择引擎,则该函数必须是用户定义的函数values
和index
分别作为函数签名中的第一个和第二个参数。每个组的索引将被传递给用户定义的函数,并且可以选择使用。在 1.1.0 版更改.
- *args
要传递给函数的位置参数。
- engine字符串,默认为无
'cython'
:从cython通过C扩展运行函数。'numba'
:通过来自Numba的JIT编译代码运行函数。None
: Defaults to'cython'
or the global settingcompute.use_numba
1.1.0 新版功能.
- engine_kwargsDict,默认无
为
'cython'
发动机,有没有接受engine_kwargs
为
'numba'
发动机,发动机可以接受nopython
,nogil
和parallel
词典的关键字。这些值必须是True
或False
。默认设置engine_kwargs
对于'numba'
引擎是{{'nopython': True, 'nogil': False, 'parallel': False}}
并将应用于该函数
1.1.0 新版功能.
- **kwargs
要传递给函数的关键字参数。
- 退货
- DataFrame
参见
DataFrame.groupby.apply
应用函数
func
分组并将结果合并在一起。DataFrame.groupby.aggregate
使用指定轴上的一个或多个操作进行聚合。
DataFrame.transform
打电话
func
关于Self生成与Self具有相同轴形状的DataFrame。
注意事项
每个组都被赋予了‘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