聚合列值以在 python/pyspark 中创建一个新列

Posted

技术标签:

【中文标题】聚合列值以在 python/pyspark 中创建一个新列【英文标题】:aggregate column values to create a new column in 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

【问题讨论】:

【参考方案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| 
+---+----+------+

【讨论】:

如果数据框中的列太多需要聚合? 列数与计算均值无关。

以上是关于聚合列值以在 python/pyspark 中创建一个新列的主要内容,如果未能解决你的问题,请参考以下文章

从 xxx.plist 获取值以在 Target 中构建设置

如何在 Databricks 的 PySpark 中使用在 Scala 中创建的 DataFrame

python, pyspark : 获取 pyspark 数据框列值的总和

根据现有的列名和列值在 python 数据框中创建列

两个数据帧的数组列的平均值并在pyspark中找到最大索引

根据其他列值/ Pandas -Python 在数据框中创建 ID 列