计算pyspark中列的中值

2024-04-24 13:05:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,如下所示:

+-----------+------------+
|parsed_date|       count|
+-----------+------------+
| 2017-12-16|           2|
| 2017-12-16|           2|
| 2017-12-17|           2|
| 2017-12-17|           2|
| 2017-12-18|           1|
| 2017-12-19|           4|
| 2017-12-19|           4|
| 2017-12-19|           4|
| 2017-12-19|           4|
| 2017-12-20|           1|
+-----------+------------+

我想计算整个“count”列的中位数,并将结果添加到新列中

我试过:

median = df.approxQuantile('count',[0.5],0.1).alias('count_median')

但我当然做错了,因为它会产生以下错误:

AttributeError: 'list' object has no attribute 'alias'

请帮忙


Tags: 数据nodfdateobjectcount错误alias
1条回答
网友
1楼 · 发布于 2024-04-24 13:05:00

您需要添加一个带有withColumn的列,因为approxQuantile返回的是浮点列表,而不是Spark列

import pyspark.sql.functions as F

df2 = df.withColumn('count_media', F.lit(df.approxQuantile('count',[0.5],0.1)[0]))

df2.show()
+     -+  -+     -+
|parsed_date|count|count_media|
+     -+  -+     -+
| 2017-12-16|    2|        2.0|
| 2017-12-16|    2|        2.0|
| 2017-12-17|    2|        2.0|
| 2017-12-17|    2|        2.0|
| 2017-12-18|    1|        2.0|
| 2017-12-19|    4|        2.0|
| 2017-12-19|    4|        2.0|
| 2017-12-19|    4|        2.0|
| 2017-12-19|    4|        2.0|
| 2017-12-20|    1|        2.0|
+     -+  -+     -+

您还可以在Spark SQL中使用^{}/^{}函数:

import pyspark.sql.functions as F

df2 = df.withColumn('count_media', F.expr("approx_percentile(count, 0.5, 10) over ()"))

df2.show()
+     -+  -+     -+
|parsed_date|count|count_media|
+     -+  -+     -+
| 2017-12-16|    2|          2|
| 2017-12-16|    2|          2|
| 2017-12-17|    2|          2|
| 2017-12-17|    2|          2|
| 2017-12-18|    1|          2|
| 2017-12-19|    4|          2|
| 2017-12-19|    4|          2|
| 2017-12-19|    4|          2|
| 2017-12-19|    4|          2|
| 2017-12-20|    1|          2|
+     -+  -+     -+

相关问题 更多 >