【问题标题】:Rename all columns after all columns aggregation [duplicate]在所有列聚合后重命名所有列[重复]
【发布时间】:2019-02-04 14:18:36
【问题描述】:

我使用类似这样的代码对数据框中的所有列进行聚合求和:

   df_aggregated = df.groupBy('key').sum()

结果列已将其名称更改为如下模式:

   sum(colum1), sum(colum2)

我需要将所有新列的名称更改为以前的名称

我尝试使用“别名”,但列太多,我想要更自动的东西

【问题讨论】:

    标签: python apache-spark dataframe pyspark aggregate


    【解决方案1】:

    您可以使用此功能。任何聚合都具有相同的模式:xxx(column_name) 如果您有一个模式,请使用正则表达式来匹配它。

    import re
    
    def rename_columns_after_any_aggregation(df):
        for name in df.schema.names:
            clear_name = ''
            m = re.search('\((.*?)\)', name)
            if m:
                clear_name = m.group(1)
                df = df.withColumnRenamed(name, clear_name)
    
        return df
    

    【讨论】:

    • 非常感谢!我已经尝试了很长时间,但我什至没有这样想:)
    • 对于那些来这里寻找 scala 解决方案的人:df.select(df.columns.map(c => col(c).as(raw"^.+\((.*?)\)".r.replaceAllIn(c, m => m.group(1)))): _*)。这会将 col 名称删除为仅括号内的内容。现在,如果只有 Stack Overflow 会停止关闭问题并指向实际上不回答 OP 问题的其他线程......
    • 更多详情请参见此处的相关主题:stackoverflow.com/questions/53002360/…
    • 当您从 Spark 2 切换到 Spark 3 时,这可能会中断,因为其中一些聚合列名称生成逻辑已更改
    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2019-10-08
    • 2021-12-24
    • 2019-09-17
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多