Dataframe Pyspark:向前填充A列,并添加B列中的值
我有一个pyspark数据框,在这里我试图使用colu_b中以前可用的值+值来填充colu_a中的值。 下面是输入数据帧Dataframe Pyspark:向前填充A列,并添加B列中的值,dataframe,pyspark,apache-spark-sql,pyspark-dataframes,Dataframe,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个pyspark数据框,在这里我试图使用colu_b中以前可用的值+值来填充colu_a中的值。 下面是输入数据帧 Input Dataframe | id | date | col_a | col_b | manufactured | |----|------------|-------|-------|--------------| | 1 | 2020-01-01 | 100 | 10 | N | | 1 | 2020-01-02 |
Input Dataframe
| id | date | col_a | col_b | manufactured |
|----|------------|-------|-------|--------------|
| 1 | 2020-01-01 | 100 | 10 | N |
| 1 | 2020-01-02 | null | null | Y |
| 1 | 2020-01-03 | null | 10 | Y |
| 1 | 2020-01-04 | null | null | Y |
| 1 | 2020-01-05 | null | 20 | Y |
| 1 | 2020-01-06 | 115 | -15 | N |
| 1 | 2020-01-07 | null | 5 | Y |
我非常希望看到以下结果:
Expected Output
| id | date | col_a | col_b | manufactured |
|----|------------|-------|-------|--------------|
| 1 | 2020-01-01 | 100 | 10 | N |
| 1 | 2020-01-02 | 100 | null | Y |
| 1 | 2020-01-03 | 110 | 10 | Y |
| 1 | 2020-01-04 | 110 | null | Y |
| 1 | 2020-01-05 | 130 | 20 | Y |
| 1 | 2020-01-06 | 115 | -15 | N |
| 1 | 2020-01-07 | 120 | 5 | Y |
到目前为止,我已经使用lag函数编写了以下代码,但是我得到了不一致的结果,在某些地方它做了正确的事情,在另一些地方它没有
# Code
import pyspark.sql.functions as F
from pyspark.sql import Window
wind = Window\
.partitionBy('id')\
.orderBy('date')
df = df.withColumn('col_b', F.when(df['col_b'].isNull(), 0).otherwise(df['col_b']))
df = df.withColumn('col_a', F.when((df['manufactured'] == 'Y'), F.lag(
'col_a').over(wind) + df['col_b']).otherwise(df['col_a']))
这里的实际输出
| id | date | col_a | col_b | manufactured |
|----|------------|-------|-------|--------------|
| 1 | 2020-01-01 | 100 | 10 | N |
| 1 | 2020-01-02 | 100 | null | Y |
| 1 | 2020-01-03 | 100 | 10 | Y |
| 1 | 2020-01-04 | 100 | null | Y |
| 1 | 2020-01-05 | 100 | 20 | Y |
| 1 | 2020-01-06 | 115 | -15 | N |
| 1 | 2020-01-07 | 120 | 5 | Y |
任何帮助都将不胜感激