当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pyspark GroupBy.transform用法及代码示例


本文简要介绍 pyspark.pandas.groupby.GroupBy.transform 的用法。

用法:

GroupBy.transform(func: Callable[[…], pandas.core.series.Series], *args: Any, **kwargs: Any) → FrameLike

将函数 column-by-column 应用于 GroupBy 对象。

传递给transform 的函数必须将系列作为其第一个参数并返回系列。对每个分组数据中的每个系列执行给定的函数。

虽然 transform 是一种非常灵活的方法,但它的缺点是使用它可能比使用更具体的方法(如 aggtransform )慢很多。 pandas-on-Spark 提供了广泛的方法,这些方法比使用 transform 用于特定目的要快得多,因此在达到 transform 之前尝试使用它们。

注意

此 API 执行一次函数以推断类型

例如,在聚合或排序之后创建数据集时,可能会很昂贵。

为避免这种情况,请在 func 中指定返回类型,例如,如下所示:

>>> def convert_to_string(x) -> ps.Series[str]:
...     return x.apply("a string {}".format)

当给定函数注释了返回类型时,GroupBy 对象的原始索引将丢失,并且默认索引将附加到结果中。请谨慎配置默认索引。另请参阅Default Index Type

注意

func 中的系列实际上是 Pandas 系列。因此,允许在此函数中使用任何 pandas API。

参数

func可调用的

以 Series 作为其第一个参数并返回 Series 的可调用对象。

*args

要传递给 func 的位置参数。

**kwargs

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

返回

appliedDataFrame

例子

>>> df = ps.DataFrame({'A': [0, 0, 1],
...                    'B': [1, 2, 3],
...                    'C': [4, 6, 5]}, columns=['A', 'B', 'C'])
>>> g = df.groupby('A')

请注意,g 有两个组,01。以各种方式调用transform,我们可以得到不同的分组结果: 下面传递给transform的函数以一个Series作为其参数并返回一个Series。 transform 将函数应用于每个分组数据中的每个系列,并将它们组合成一个新的DataFrame:

>>> def convert_to_string(x) -> ps.Series[str]:
...     return x.apply("a string {}".format)
>>> g.transform(convert_to_string)  
            B           C
0  a string 1  a string 4
1  a string 2  a string 6
2  a string 3  a string 5
>>> def plus_max(x) -> ps.Series[np.int]:
...     return x + x.max()
>>> g.transform(plus_max)  
   B   C
0  3  10
1  4  12
2  6  10

您可以省略类型提示并让pandas-on-Spark 推断其类型。

>>> def plus_min(x):
...     return x + x.min()
>>> g.transform(plus_min)  
   B   C
0  2   8
1  3  10
2  6  10

在系列的情况下,它的工作原理如下。

>>> df.B.groupby(df.A).transform(plus_max)
0    3
1    4
2    6
Name: B, dtype: int64
>>> (df * -1).B.groupby(df.A).transform(abs)
0    1
1    2
2    3
Name: B, dtype: int64

您还可以指定要传递给函数的额外参数。

>>> def calculation(x, y, z) -> ps.Series[np.int]:
...     return x + x.min() + y + z
>>> g.transform(calculation, 5, z=20)  
    B   C
0  27  33
1  28  35
2  31  35

相关用法


注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.pandas.groupby.GroupBy.transform。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。