當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。