我有一个包含列a的DataFrame.我想在列a的基础上创建两个额外的列(b和c).我可以通过两次相同的操作来解决这个问题:

df = df.withColumn('b', when(df.a == 'something', 'x'))\
       .withColumn('c', when(df.a == 'something', 'y'))

我想避免同样的事情重复做,因为b和c更新的条件是相同的,而且a列的情况也很多.这个问题有没有更聪明的解决方案?"with Column"是否可以接受多个列?

推荐答案

在这种情况下,struct是最合适的.请参见下面的示例.

spark.sparkContext.parallelize([('something',), ('foobar',)]).toDF(['a']). \
    withColumn('b_c_struct', 
               func.when(func.col('a') == 'something', 
                         func.struct(func.lit('x').alias('b'), func.lit('y').alias('c'))
                         )
               ). \
    select('*', 'b_c_struct.*'). \
    show()

# +---------+----------+----+----+
# |        a|b_c_struct|   b|   c|
# +---------+----------+----+----+
# |something|    {x, y}|   x|   y|
# |   foobar|      null|null|null|
# +---------+----------+----+----+

只需在select后面使用drop('b_c_struct')即可删除 struct 列并保留各个字段.

Python相关问答推荐

从包含基本数据描述的文本字段中识别和检索特定字符序列

具有多个组的条形图的不同y标度

收件箱转换错误- polars.exceptions. ComputeHelp- pandera(0.19.0b3)带有polars

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

使用scipy. optimate.least_squares()用可变数量的参数匹配两条曲线

如何使用pandasDataFrames和scipy高度优化相关性计算

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

如何获取numpy数组的特定索引值?

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

Pandas:将多级列名改为一级

SQLAlchemy Like ALL ORM analog

在极性中创建条件累积和

Scrapy和Great Expectations(great_expectations)—不合作

未知依赖项pin—1阻止conda安装""

当我try 在django中更新模型时,模型表单数据不可见

Discord.py -

如果包含特定值,则筛选Groupby

无法在Spyder上的Pandas中将本地CSV转换为数据帧