Spark中按列分组计算均值及分组后0值缺失问题求助
解决方案
针对你的需求,分两种常见DataFrame库给出实现代码:
1. Pandas 实现
import pandas as pd # 构建原始数据 data = {'Col1': [0, 1, 1, 1, 0, 2], 'Value': [20, 30, 20, 10, 10, 30]} df = pd.DataFrame(data) # 分组计算均值,重置索引并重命名列 result_df = df.groupby('Col1')['Value'].mean().reset_index().rename(columns={'Value': 'Value2'}) print(result_df)
执行后会输出你需要的结果:
Col1 Value2 0 0 15.0 1 1 20.0 2 2 30.0
2. PySpark 实现
from pyspark.sql import SparkSession from pyspark.sql.functions import avg # 初始化Spark会话 spark = SparkSession.builder.appName("groupby_avg").getOrCreate() # 构建原始数据 data = [(0, 20), (1, 30), (1, 20), (1, 10), (0, 10), (2, 30)] df = spark.createDataFrame(data, schema=["Col1", "Value"]) # 分组聚合计算均值,并重命名结果列 result_df = df.groupBy("Col1").agg(avg("Value").alias("Value2")).orderBy("Col1") result_df.show()
执行后输出:
+----+------+ |Col1|Value2| +----+------+ | 0| 15.0| | 1| 20.0| | 2| 30.0| +----+------+
关于你遇到的df.groupBy("Col1")看不到0值的问题
单独调用groupBy("Col1")并不会生成可见的分组结果,它只是创建了一个分组操作的中间对象(Pandas里是GroupBy对象,PySpark里是GroupedData对象)。只有在这个基础上调用聚合函数(比如mean()、sum()),才会执行实际的分组计算并返回包含所有分组(包括0)的结果DataFrame。
内容的提问来源于stack exchange,提问作者Quim Quadrada
相关产品推荐
相关产品推荐

