対応する列値の集計に基づいて条件付きでNAを入力します

Lindsay Veazey

ブランド、色、評価の3つの列を持つデータフレームがあります。

values = [('Lacoste', 'Red', 6), ('Gap', 'Orange', 8), ('Lacoste', 'Green', 5),
         ('Gap', 'Red', 3), ('Gap', 'Orange', 5), ('Lacoste', 'Green', 3),
         ('Lacoste', 'Orange', 9), ('Lacoste', 'Red', 4), ('Gap', 'Green', None),
         ('Lacoste', 'Red', None), ('Gap', 'Orange', 5), ('Lacoste', 'Green', None),
         ('Banana Republic', 'Orange', None)]
ratings = spark.createDataFrame(values, ['Brand', 'Color', 'Rating'])
ratings.show()

#+---------------+------+------+
#|          Brand| Color|Rating|
#+---------------+------+------+
#|        Lacoste|   Red|     6|
#|            Gap|Orange|     8|
#|        Lacoste| Green|     5|
#|            Gap|   Red|     3|
#|            Gap|Orange|     5|
#|        Lacoste| Green|     3|
#|        Lacoste|Orange|     9|
#|        Lacoste|   Red|     4|
#|            Gap| Green|  null|
#|        Lacoste|   Red|  null|
#|            Gap|Orange|     5|
#|        Lacoste| Green|  null|
#|Banana Republic|Orange|  null|
#+---------------+------+------+

期待される出力:

null以外のすべてのラコステアイテムの平均評価は(6 + 5 + 3 + 9 + 4)/ 5 = 5.4です。Lacosteブランドのすべてのnull評価値は5.4に設定する必要があります。

null以外のすべてのギャップアイテムの平均評価は(8 + 3 + 5 + 5)/ 4 = 5.25です。Gapブランドのすべてのnull評価値は5.25に設定する必要があります。

null以外のバナナリパブリックのアイテムの平均評価はないため、代わりに色で集計します。null以外のすべてのオレンジ色のアイテムの平均評価は(8 + 5 + 9 + 5)/ 4 = 6.75であるため、オレンジ色のnull以外のバナナリパブリックアイテムを6.75に設定します。

これは、条件ステートメントを使用して、このデータフレーム内のnullの1つの計算されたデータフレームからの値を入力する試みです。

brand_agg=ratings.groupBy("Brand").agg(avg("Rating").alias('Mean'))
brand_agg.show()

#+---------------+----+
#|          Brand|Mean|
#+---------------+----+
#|            Gap|5.25|
#|        Lacoste| 5.4|
#|Banana Republic|null|
#+---------------+----+

# this fails miserably
testing_df = ratings.withColumn('Rating', 
    when((ratings.Rating.isNull()) & 
    (brand_agg.Brand == ratings.Brand), 
    brand_agg.Mean).otherwise(ratings.Rating)) 

単一のレコードを分離して条件付きで埋めるという非常に基本的な最初のステップでさえも苦労しています。ガイダンスに感謝します。

mck

meanブランド/色のパーティションで使用し、nullではない平均が見つかるまでnullcoalesceをに置き換えるために使用meanできます。

from pyspark.sql import functions as F, Window

filled = ratings.withColumn(
    'Rating',
    F.coalesce(
        F.col('Rating'), 
        F.mean('Rating').over(Window.partitionBy('Brand')), 
        F.mean('Rating').over(Window.partitionBy('Color'))
    )
)

filled.show()
+---------------+------+------+
|          Brand| Color|Rating|
+---------------+------+------+
|            Gap|Orange|   8.0|
|            Gap|Orange|   5.0|
|            Gap|Orange|   5.0|
|        Lacoste|Orange|   9.0|
|Banana Republic|Orange|  6.75|
|            Gap| Green|  5.25|
|        Lacoste| Green|   5.0|
|        Lacoste| Green|   3.0|
|        Lacoste| Green|   5.4|
|            Gap|   Red|   3.0|
|        Lacoste|   Red|   6.0|
|        Lacoste|   Red|   4.0|
|        Lacoste|   Red|   5.4|
+---------------+------+------+

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

SQL:集計値に基づいて条件付きで列を選択します

分類Dev

別の列に基づいて条件付きで列を集計する方法

分類Dev

別の列の値に基づいて、ある列の再帰を条件付きで計算します

分類Dev

別の列の値に基づいて、ある列の再帰を条件付きで計算します

分類Dev

条件付きで、他の2つの列値に基づいて列を合計します

分類Dev

typescriptのパラメータ値に基づいて条件付きで関数を入力します

分類Dev

行の値に基づいて条件付きで新しい列を作成する

分類Dev

pysparkの条件に基づいて値を集計します

分類Dev

Crystal Reports 2016クロス集計は、条件付きで使用可能な指定された列の値に基づいて行を抑制します

分類Dev

複数の列に基づいてNAに以前の値を入力します

分類Dev

Teradataの条件付き優先順位に基づいて列にデータを入力します

分類Dev

別の列の集計に基づいて、対応する列の値を取得するにはどうすればよいですか?

分類Dev

重複した列の条件に基づいて不足している値を入力します

分類Dev

別の列の集計に基づいて、1つの列にNULL値を入力する

分類Dev

条件付きマトリックス:列のペアに基づいて値を計算します

分類Dev

条件付きの列の値に基づいて、連続するパンダの行の日付間の差を計算します

分類Dev

Jestには、入力に基づいて条件付きで値を返す方法がありますか?

分類Dev

データフレーム列の条件付き作成。列値の計算は行入力に基づいて変更されます

分類Dev

Python:他の2つの列の値に基づいて条件付きで新しい列を作成する

分類Dev

他の列の値に基づいて、シリーズの値を条件付きで変更します

分類Dev

列の値に基づいて条件付きで重複を保持する

分類Dev

列の他の値に基づいてNA値を入力する

分類Dev

他の列に基づいて、条件付きで列を作成します

分類Dev

Pythonの他の条件に基づいて対応する時間間隔を計算します

分類Dev

入力値に基づいて集計を維持します-異なる「変数」?

分類Dev

同じID番号の行を集約し、集約に基づいて列値を入力する

分類Dev

Rの別の列の最小値に基づいて1つの列の対応する値を取得します

分類Dev

前の列に値が含まれている場合は、条件付きで列に入力しますか?

分類Dev

2つの異なる列に条件付きで列値を入力します

Related 関連記事

  1. 1

    SQL:集計値に基づいて条件付きで列を選択します

  2. 2

    別の列に基づいて条件付きで列を集計する方法

  3. 3

    別の列の値に基づいて、ある列の再帰を条件付きで計算します

  4. 4

    別の列の値に基づいて、ある列の再帰を条件付きで計算します

  5. 5

    条件付きで、他の2つの列値に基づいて列を合計します

  6. 6

    typescriptのパラメータ値に基づいて条件付きで関数を入力します

  7. 7

    行の値に基づいて条件付きで新しい列を作成する

  8. 8

    pysparkの条件に基づいて値を集計します

  9. 9

    Crystal Reports 2016クロス集計は、条件付きで使用可能な指定された列の値に基づいて行を抑制します

  10. 10

    複数の列に基づいてNAに以前の値を入力します

  11. 11

    Teradataの条件付き優先順位に基づいて列にデータを入力します

  12. 12

    別の列の集計に基づいて、対応する列の値を取得するにはどうすればよいですか?

  13. 13

    重複した列の条件に基づいて不足している値を入力します

  14. 14

    別の列の集計に基づいて、1つの列にNULL値を入力する

  15. 15

    条件付きマトリックス:列のペアに基づいて値を計算します

  16. 16

    条件付きの列の値に基づいて、連続するパンダの行の日付間の差を計算します

  17. 17

    Jestには、入力に基づいて条件付きで値を返す方法がありますか?

  18. 18

    データフレーム列の条件付き作成。列値の計算は行入力に基づいて変更されます

  19. 19

    Python:他の2つの列の値に基づいて条件付きで新しい列を作成する

  20. 20

    他の列の値に基づいて、シリーズの値を条件付きで変更します

  21. 21

    列の値に基づいて条件付きで重複を保持する

  22. 22

    列の他の値に基づいてNA値を入力する

  23. 23

    他の列に基づいて、条件付きで列を作成します

  24. 24

    Pythonの他の条件に基づいて対応する時間間隔を計算します

  25. 25

    入力値に基づいて集計を維持します-異なる「変数」?

  26. 26

    同じID番号の行を集約し、集約に基づいて列値を入力する

  27. 27

    Rの別の列の最小値に基づいて1つの列の対応する値を取得します

  28. 28

    前の列に値が含まれている場合は、条件付きで列に入力しますか?

  29. 29

    2つの異なる列に条件付きで列値を入力します

ホットタグ

アーカイブ