pyspark 如果字段相同,则对特定行的值求和

6kkfgxo0  于 2022-11-01  发布在  Spark
关注(0)|答案(2)|浏览(126)

嗨,如果“ID”与 Dataframe 中的所有列匹配,我将尝试对一列的值求和
比如说
| 识别码|性别问题|价值|
| - -|- -|- -|
| 一个|男性|五个|
| 一个|男性|六个|
| 2个|女性|三个|
| 三个|女性|第0页|
| 三个|女性|九个|
| 四个|男性|10个|
如何获取下表
| 识别码|性别问题|价值|
| - -|- -|- -|
| 一个|男性|十一|
| 2个|女性|三个|
| 三个|女性|九个|
| 四个|男性|10个|
在上面的示例中,值为1的ID现在只显示一次,并且其值已求和(值为3的ID也是如此)。
谢谢
我是Pyspark的新手,还在学习中。我试过count()、select和groupby(),但没有任何结果。

pinkon5k

pinkon5k1#

请尝试以下操作:

df = (
    df
    .withColumn('value', f.sum(f.col('value')).over(Window.partitionBy(f.col('ID'))))
)

指向有关Window操作https://spark.apache.org/docs/3.1.3/api/python/reference/api/pyspark.sql.functions.window.html的文档的链接

f5emj3cl

f5emj3cl2#

您可以使用简单的groupBysum函数:

from pyspark.sql import functions as F

(
    df
    .groupby("ID", 'Gender')  # sum rows with same ID and Gender
    # .groupby("ID")  # use this line instead if you want to sum rows with the same ID, even if they have different Gender
    .agg(F.sum('value').alias('value'))
)

其结果是:

+---+------+-----+
| ID|Gender|value|
+---+------+-----+
|  1|  Male|   11|
|  2|Female|    3|
|  3|Female|    9|
|  4|  Male|   10|
+---+------+-----+

相关问题