pyspark.pandas.groupby.GroupBy.transform
的用法。用法:
GroupBy.transform(func: Callable[[…], pandas.core.series.Series], *args: Any, **kwargs: Any) → FrameLike
将函数 column-by-column 应用于 GroupBy 对象。
传递给
transform
的函数必须将系列作为其第一个参数并返回系列。对每个分组数据中的每个系列执行给定的函数。虽然
transform
是一种非常灵活的方法,但它的缺点是使用它可能比使用更具体的方法(如agg
或transform
)慢很多。 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 的关键字参数。
- applied:DataFrame
参数:
返回:
例子:
>>> df = ps.DataFrame({'A': [0, 0, 1], ... 'B': [1, 2, 3], ... 'C': [4, 6, 5]}, columns=['A', 'B', 'C'])
>>> g = df.groupby('A')
请注意,
g
有两个组,0
和1
。以各种方式调用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
相关用法
- Python pyspark GroupBy.tail用法及代码示例
- Python pyspark GroupBy.mean用法及代码示例
- Python pyspark GroupBy.head用法及代码示例
- Python pyspark GroupBy.cumsum用法及代码示例
- Python pyspark GroupBy.rank用法及代码示例
- Python pyspark GroupBy.bfill用法及代码示例
- Python pyspark GroupBy.cummin用法及代码示例
- Python pyspark GroupBy.cummax用法及代码示例
- Python pyspark GroupBy.fillna用法及代码示例
- Python pyspark GroupBy.apply用法及代码示例
- Python pyspark GroupBy.diff用法及代码示例
- Python pyspark GroupBy.filter用法及代码示例
- Python pyspark GroupBy.cumcount用法及代码示例
- Python pyspark GroupBy.idxmax用法及代码示例
- Python pyspark GroupBy.shift用法及代码示例
- Python pyspark GroupBy.idxmin用法及代码示例
- Python pyspark GroupBy.nunique用法及代码示例
- Python pyspark GroupBy.median用法及代码示例
- Python pyspark GroupBy.size用法及代码示例
- Python pyspark GroupBy.any用法及代码示例
- Python pyspark GroupBy.all用法及代码示例
- Python pyspark GroupBy.get_group用法及代码示例
- Python pyspark GroupBy.ffill用法及代码示例
- Python pyspark GroupBy.backfill用法及代码示例
- Python pyspark GroupBy.cumprod用法及代码示例
注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.pandas.groupby.GroupBy.transform。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。