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.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 的
dtype和name。
示例
>>> 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