我有一個spark資料框架:
Location Month Brand Sector TrueValue PickoutValue
美國 1/1/2021 brand1 cars1 7418 30000
美國 2/1/2021 brand1 cars1 1940 2000
美國 3/1/2021 brand1 cars1 4692 2900 >。
美國 4/1/2021 brand1 cars1
美國 1/1/2021 brand2 cars2 16383104.2 16666667
美國 2/1/2021 brand2 cars2 26812874.2 166667
美國 3/1/2021 品牌2 汽車2
美國 1/1/2021 brand3 cars3 75.6% 70.0%
美國 3/1/2021 brand3 cars3 73.1% 70.0%
美國 2/1/2021 brand3 cars3 77.1% 70.0%
我需要計算品牌1、品牌2的累積總和和品牌3的累積平均數,并在TotalSumValue列中加載這些數值
。我期望的資料框架是:
-------- -------- ------ ------ ---------- ------------ ------------------- -------------
# |地點|月份|品牌|部門|真實價值|挑選價值|月份_in_timestamp|總和價值|。
# -------- -------- ------ ------ ---------- ------------ ------------------- -------------
# |美國|1/1/2021|brand1|cars1|7418|30000|2021-01-01 00:00:00|7418.0|。
# | 美國|2/1/2021|brand1| cars1| 1940| 2000|2021-01-02 00:00:00| 9358.0|。
# | 美國|3/1/2021|brand1| cars1| 4692| 2900|2021-01-03 00:00:00| 14050.0|
# | 美國|4/1/2021|brand1| cars1| null| null|2021-01-04 00:00:00| 14050.0|。
# | 美國|1/2021|brand2|carls2|16383104.2| 16666667|2021-01-01 00:00:00| 16383104.2|
# | 美國|2/1/2021|brand2|carls2|26812874.2| 16666667|2021-01-02 00:00:00| 43195978.4|。
# | 美國|3/1/2021|brand2| cars2| null| null|2021-01-03 00:00:00| 43195978.4|
# | 美國|1/1/2021|brand3| cars3| 75.6| 70.0|2021-01-01 00:00:00| 75.6|。
# | 美國|2/1/2021|brand3| cars3| 77.1| 70.0|2021-01-02 00:00:00| 76.4|
# | 美國|3/1/2021|brand3| cars3| 73.1| 70.0|2021-01-03 00:00:00| 75.3|
# -------- -------- ------ ------ ---------- ------------ ------------------- -------------
我正在嘗試使用這段代碼,但我在TotalSumValue列中的所有行都得到null。
windowval=(Window.partitionBy('Location','Brand') 。orderBy('month_in_timestamp')
.rangeBetween(Window.unboundedPreceding, 0)
df = df.withColumn('TotalSumValue',
F.when(F.col('Brand').isin('brand1', 'brand2'), F。 sum('TrueValue').over(windowval))。
F.when(F.col('Brand').isin('brand3'), F.avg('TrueValue') .over(windowval))
uj5u.com熱心網友回復:
你需要連鎖when()子句,因為你想填充一個單列:
windowval=(Window.partitionBy('Location','Brand').orderBy('month_in_timestamp')
.rangeBetween(Window.unboundedPreceding, 0)
df = df.withColumn('TotalSumValue',
F.when(F.col('Brand').isin('brand1', 'brand2'), F。 sum('TrueValue').over(windowval))
.當(F.col('Brand').isin('brand3'), F.avg('TrueValue') .over(windowval))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310745.html
標籤:
