汇总列值以在python / pyspark中创建一个新列

时间:2019-10-10 19:05:47

标签: python pyspark

我有一个数据集,我想创建一个新列,其中包含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

1 个答案:

答案 0 :(得分:0)

您只需要一个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| 
+---+----+------+