【问题标题】:Create a Column with list value from columns that start with a substring from a dataframe, for each rows为每一行从以数据帧中的子字符串开头的列创建具有列表值的列
【发布时间】:2021-08-01 00:59:39
【问题描述】:

我有一个这样的数据框:

name, surname, delivery_?, delivery_?, delivery_?,other delivery_?, recovery_?,recovery_?, recovery_?, and other recovery_?

我想要:

name, surname, delivery, recovery

每行的值[df['delivery_?'],df['delivery_?'],df['delivery_?'],........](列表)的传递列,

和每行的值[df['recovery_?'],df['recovery_?'],df['recovery_?'],....](列表)的恢复列。

我知道在 parent_list 我有 ['recovery','delivery', ....]

我使用 python。 谢谢 问候

【问题讨论】:

    标签: dataframe pyspark user-defined-functions aggregation


    【解决方案1】:

    您可以创建数组列:

    import pyspark.sql.functions as F
    from functools import reduce
    
    parent_list = ['recovery', 'delivery']
    
    df2 = df.select(
        *[F.col(c) for c in df.columns if not reduce(lambda a, b: a or c.startswith(b), parent_list, False)],
        *[F.array(*[F.col(c) for c in df.columns if c.startswith(i)]).alias(i) for i in parent_list]
    )
    

    【讨论】:

    • 好的,谢谢,但实际上我有很多字段名称,姓氏.......而且我不知道字段的名称delivery_A,delivery_B,delivery_C 我如何处理这份工作?
    • 我只知道开始交货或更换
    • 我有 parent_list 和字符串列表 ['recovery','delivery',...]
    猜你喜欢
    • 1970-01-01
    • 2021-01-29
    • 2019-10-19
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2021-11-11
    • 2018-09-23
    相关资源
    最近更新 更多