maxframe.dataframe.groupby.GroupBy.transform#

GroupBy.transform(f, *args, dtypes=None, dtype=None, name=None, index=None, output_types=None, skip_infer=False, **kwargs)#

对每个分组调用生成具有相同索引的 DataFrame 的函数,并返回一个与原始对象具有相同索引且填充了转换值的 DataFrame

参数:
  • f (function) -- 应用到每个分组的函数。

  • dtypes (Series, default None) -- 指定返回的 DataFrames 的数据类型。详见“注意事项”。

  • dtype (numpy.dtype, default None) -- 指定返回的 Series 的数据类型。详见“注意事项”。

  • name (str, default None) -- 指定返回的 Series 的名称。详见“注意事项”。

  • skip_infer (bool, default False) -- 当未指定 dtypes 或 output_type 时是否推断数据类型。

  • *args -- 传递给 func 的位置参数

  • **kwargs -- 传递给 func 的关键字参数。

返回类型:

DataFrame

参见

DataFrame.groupby.apply, DataFrame.groupby.aggregate, DataFrame.transform

备注

每个分组都会被赋予 'name' 属性,以便你知道当前处理的是哪个分组。

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

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

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

  • f 不得修改分组。修改操作不受支持,可能会产生意外结果。

备注

在决定输出数据类型和返回值形状时,MaxFrame 会尝试将 func 应用于模拟的分组对象,此时 transform 调用可能会失败。

  • 对于 DataFrame 输出,你需要将一个列表或 pandas Series 指定为输出 DataFrame 的 dtypes。也可以指定输出的 index

  • 对于 Series 输出,你需要指定输出 Series 的 dtypename

示例

>>> import maxframe.dataframe as md
>>> df = md.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()).execute()
          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()).execute()
   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