【问题标题】:aggregate column values to create a new column in python/pyspark聚合列值以在 python/pyspark 中创建一个新列
【发布时间】:2019-10-10 19:05:47
【问题描述】:

我有一个数据集,我想创建一个新列,其中包含 id 出现的平均年龄和每个 id 的性别模式。

id  Age  Gender
1   10     F
2    2     M
2   10     F
2   3      F
3   10     M

预期输出

id Age  Gender
1  10     F
2   5     F
2   5     F
2   5     F
3  10     M

【问题讨论】:

    标签: python pyspark


    【解决方案1】:

    您只需要一个window 并应用mean 函数:

    import pyspark.sql.functions as F
    from pyspark.sql import Window
    
    l =[(1,   10   ,  'F')
    ,(2 ,   2   ,  'M')
    ,(2 ,  10  ,   'F')
    ,(2 ,  3  ,    'F')
    ,(3 ,  10,     'M')]
    
    columns = ['id',  'Age',  'Gender']
    
    df=spark.createDataFrame(l, columns)
    
    w = Window.partitionBy('id')
    
    df.withColumn('Age', F.mean('Age').over(w)).show()
    

    输出:

    +---+----+------+ 
    | id| Age|Gender| 
    +---+----+------+ 
    |  1|10.0|     F| 
    |  3|10.0|     M| 
    |  2| 5.0|     F| 
    |  2| 5.0|     F| 
    |  2| 5.0|     M| 
    +---+----+------+
    

    【讨论】:

    • 如果数据框中的列太多需要聚合?
    • 列数与计算均值无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多