首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >火花放电中柱动态唯一组合的滤波

火花放电中柱动态唯一组合的滤波
EN

Stack Overflow用户
提问于 2020-08-23 07:25:49
回答 1查看 442关注 0票数 0

我有df1作为原始数据,df2有独特的A&B组合,结果是取每一个独特组合的数量。见下文:

df1 -> df2

Combination = df1.crosstab("A", "B")现在可以使用当前在df2中的值应用过滤器,但挑战是,随着df1随时间的变化,df2可以是动态的。因此,不能手动修复过滤器。(见下文)

代码语言:javascript
运行
复制
Result = df1.withColumn("Avg", when(col("A")=="AI3 & col("B")=="AI5), avg(col("Amount"))
………...

需要读取和映射df2组合,以有效地过滤和获得结果。

EN

回答 1

Stack Overflow用户

发布于 2020-08-23 08:43:36

如果要保留第一个数据,请使用Window

代码语言:javascript
运行
复制
import pyspark.sql.functions as f
from pyspark.sql import Window

w = Window.partitionBy('A', 'B')

df.withColumn('avg', f.avg('Amount').over(w)).show()

+---+---+------+----+
|  A|  B|Amount| avg|
+---+---+------+----+
|AI8|AI5|    75|50.0|
|AI8|AI5|    25|50.0|
|AI3|AI5|    20|20.0|
|AI3|AI5|    30|20.0|
|AI3|AI5|    10|20.0|
|AI5|AI3|    80|80.0|
+---+---+------+----+

我不明白你为什么需要数据格式的df2。只需按df1分组,得到每个AB的平均值,这就是您想要的。Group表示这些列已经实现了不同的列组合。

代码语言:javascript
运行
复制
df.groupBy('A', 'B').avg('Amount').show()

+---+---+-----------+
|  A|  B|avg(Amount)|
+---+---+-----------+
|AI8|AI5|       50.0|
|AI3|AI5|       20.0|
|AI5|AI3|       80.0|
+---+---+-----------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63544417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档