如何根据sp中的另一列数据更新列名

2024-05-19 10:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下要求

测向

+-------------+----+------+--------+----+
|          des|  id|veh_cd|veh_p_cd|code|
+-------------+----+------+--------+----+
|BodilyInjured|1001|    45|      50| BI_|
|BodilyInjured|1001|    12|      55| BI_|
|    Collision|1001|    18|      21|col_|
|    Collision|1002|    21|      25|col_|
+-------------+----+------+--------+----+

如果“des”是“bodyinjured”,则应在“veh\u cd”和“veh\u p\u cd”中分别添加两列“biu veh\u cd”和biu veh\u p\u cd,这两列应包含veh\u cd和veh\u p\u cd的最大值,同样适用于“Collision”

注:需要在“veh\u cd”和“veh\u p\u cd”后面分别添加“code”作为列名,并填充相应的数据。列名格式应为code+columnname。例如:对于身体受伤代码为BI now,列名应为“BI\ veh\ U cd”和“BI\ veh\ U p\ U cd”

预期产量

id  BI_veh_cd   BI_veh_p_cd     col_veh_cd  col_veh_p_cd
1001    45        55            18            21
1002    NULL      NULL         21             25

Tags: 数据id格式cdcodecolnullbi
1条回答
网友
1楼 · 发布于 2024-05-19 10:24:21

您正在寻找pivot功能:

from pyspark.sql.functions import max

df1 = df.groupBy("id") \
       .pivot("code") \
       .agg(max("veh_cd"), max("veh_p_cd")) \
       .orderBy("id")

要重命名列,我们可以使用vanillaPythonregex:

import re

newnames = [re.sub("max|\(|\)", '', i) for i in df1.columns]
df1.toDF(*newnames).show()
+  +     +      +     -+      -+
|  id|BI__veh_cd|BI__veh_p_cd|col__veh_cd|col__veh_p_cd|
+  +     +      +     -+      -+
|1001|        45|          55|         18|           21|
|1002|      null|        null|         21|           25|
+  +     +      +     -+      -+

相关问题 更多 >

    热门问题