Answers:
使用lit
会将列的所有值转换为给定值。
若要仅对数据帧的非空值执行此操作,则必须过滤每列的非空值并替换您的值。when
可以帮助您实现这一目标。
from pyspark.sql.functions import when
df.withColumn('c1', when(df.c1.isNotNull(), 1))
.withColumn('c2', when(df.c2.isNotNull(), 1))
.withColumn('c3', when(df.c3.isNotNull(), 1))
这将导致:
另外,如果您也想将这些空值替换为其他值,则可以otherwise
与结合使用when
。假设您要在0
此处进行估算:
from pyspark.sql.functions import when
df.withColumn('c1', when(df.c1.isNotNull(), 1).otherwise(0))
.withColumn('c2', when(df.c2.isNotNull(), 1).otherwise(0))
.withColumn('c3', when(df.c3.isNotNull(), 1).otherwise(0))
这将导致:
根据您的问题,我认为使用lit可能会更容易。尝试这个-
from pyspark.sql.functions import lit
new_df = df.withColumn('column_name', lit(1))
希望能帮助到你!
如果您有多个列,这会更容易:
from pyspark.sql.functions import when
cols = df.columns # list of all columns
for col in cols:
df= df.withColumn(col, when(df[col]>0,1).otherwise(0))