Pyspark-リセット条件付きの累積合計

カフェル

私はこのデータフレームを持っています

+---+----+---+
|  A|   B|  C|
+---+----+---+
|  0|null|  1|
|  1| 3.0|  0|
|  2| 7.0|  0|
|  3|null|  1|
|  4| 4.0|  0|
|  5| 3.0|  0|
|  6|null|  1|
|  7|null|  1|
|  8|null|  1|
|  9| 5.0|  0|
| 10| 2.0|  0|
| 11|null|  1|
+---+----+---+

私がする必要があるのは、次の値がゼロになるまでの列Cの値の累積合計です。次に、累積合計をリセットし、すべての行が終了するまでこれを実行します。

期待される出力:

+---+----+---+----+
|  A|   B|  C|   D|
+---+----+---+----+
|  0|null|  1|   1|
|  1| 3.0|  0|   0|
|  2| 7.0|  0|   0|
|  3|null|  1|   1|
|  4| 4.0|  0|   0|
|  5| 3.0|  0|   0|
|  6|null|  1|   1|
|  7|null|  1|   2|
|  8|null|  1|   3|
|  9| 5.0|  0|   0|
| 10| 2.0|  0|   0|
| 11|null|  1|   1|
+---+----+---+----+

私はすでにWindow().rangeBetween関数を使用して目的の出力に到達しましたが、問題は、固定ウィンドウ範囲を定義できないことです。これは、DataFrameが連続して5回1、場合によっては2回だけになる可能性があるためです。

私の質問はこのPysparkに非常に似ています:リセット条件付きの累積合計ですが、誰も答えていません。

データフレームを再現するには:

from pyspark.shell import sc
from pyspark.sql import Window
from pyspark.sql.functions import lag, when, sum

x = sc.parallelize([
    [0, None], [1, 3.], [2, 7.], [3, None], [4, 4.],
    [5, 3.], [6, None], [7, None], [8, None], [9, 5.], [10, 2.], [11, None]])
x = x.toDF(['A', 'B'])

# Transform null values into "1"
x = x.withColumn('C', when(x.B.isNull(), 1).otherwise(0))
パウリ

grpC0(リセット条件)に等しくなるたびにカウンターをインクリメントする一時列()を作成し、これを累積合計の分割列として使用します。

import pyspark.sql.functions as f
from pyspark.sql import Window

x.withColumn(
    "grp", 
    f.sum((f.col("C") == 0).cast("int")).over(Window.orderBy("A"))
).withColumn(
    "D",
    f.sum(f.col("C")).over(Window.partitionBy("grp").orderBy("A"))
).drop("grp").show()
#+---+----+---+---+
#|  A|   B|  C|  D|
#+---+----+---+---+
#|  0|null|  1|  1|
#|  1| 3.0|  0|  0|
#|  2| 7.0|  0|  0|
#|  3|null|  1|  1|
#|  4| 4.0|  0|  0|
#|  5| 3.0|  0|  0|
#|  6|null|  1|  1|
#|  7|null|  1|  2|
#|  8|null|  1|  3|
#|  9| 5.0|  0|  0|
#| 10| 2.0|  0|  0|
#| 11|null|  1|  1|
#+---+----+---+---+

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pyspark:ウィンドウ/条件付きの累積合計

分類Dev

Pyspark-条件付きの列の累積合計を取得します

分類Dev

pysparkの累積合計

分類Dev

条件付きの累積合計リセット

分類Dev

dplyr / Rリセット付き累積合計

分類Dev

ランニングサム/床と天井の累積合計PySpark

分類Dev

条件付きのR累積合計

分類Dev

条件付きの累積合計

分類Dev

SASの条件付き累積合計

分類Dev

R(dplyr)でリセットされた条件付き実行カウント(累積合計)

分類Dev

リセット条件を使用した累積合計のMySQL計算

分類Dev

複数の条件が満たされた場合のリセットオプション付きの累積合計

分類Dev

Pyspark:毎月、過去3か月の累積合計を作成します

分類Dev

DAX:特定の日付のしきい値で累積合計をリセットします

分類Dev

リセットされた条件によるR累積合計

分類Dev

R条件とリセットを含む累積合計

分類Dev

条件に応じてリセットされる7日間の累積合計

分類Dev

Sparkデータフレーム/データセット:一般的な条件付き累積合計

分類Dev

XSLT:累積合計(条件付き)

分類Dev

条件付き累積合計マクロ

分類Dev

日付によるパンダの累積条件付き合計

分類Dev

pysparkの多数の列で累積合計を行うための最適化された方法

分類Dev

一度に累積および減算するときにリセットされる条件付き累積

分類Dev

条件付きの列のパンダ累積合計

分類Dev

パンダ:条件付きの2列からの累積合計

分類Dev

停止条件付きのnumpy配列の累積合計

分類Dev

フラグ値までのSQL累積合計と合計のリセット

分類Dev

パンダの条件付き累積合計

分類Dev

Pythonでの条件付き反復累積合計

Related 関連記事

  1. 1

    Pyspark:ウィンドウ/条件付きの累積合計

  2. 2

    Pyspark-条件付きの列の累積合計を取得します

  3. 3

    pysparkの累積合計

  4. 4

    条件付きの累積合計リセット

  5. 5

    dplyr / Rリセット付き累積合計

  6. 6

    ランニングサム/床と天井の累積合計PySpark

  7. 7

    条件付きのR累積合計

  8. 8

    条件付きの累積合計

  9. 9

    SASの条件付き累積合計

  10. 10

    R(dplyr)でリセットされた条件付き実行カウント(累積合計)

  11. 11

    リセット条件を使用した累積合計のMySQL計算

  12. 12

    複数の条件が満たされた場合のリセットオプション付きの累積合計

  13. 13

    Pyspark:毎月、過去3か月の累積合計を作成します

  14. 14

    DAX:特定の日付のしきい値で累積合計をリセットします

  15. 15

    リセットされた条件によるR累積合計

  16. 16

    R条件とリセットを含む累積合計

  17. 17

    条件に応じてリセットされる7日間の累積合計

  18. 18

    Sparkデータフレーム/データセット:一般的な条件付き累積合計

  19. 19

    XSLT:累積合計(条件付き)

  20. 20

    条件付き累積合計マクロ

  21. 21

    日付によるパンダの累積条件付き合計

  22. 22

    pysparkの多数の列で累積合計を行うための最適化された方法

  23. 23

    一度に累積および減算するときにリセットされる条件付き累積

  24. 24

    条件付きの列のパンダ累積合計

  25. 25

    パンダ:条件付きの2列からの累積合計

  26. 26

    停止条件付きのnumpy配列の累積合計

  27. 27

    フラグ値までのSQL累積合計と合計のリセット

  28. 28

    パンダの条件付き累積合計

  29. 29

    Pythonでの条件付き反復累積合計

ホットタグ

アーカイブ