如何解决在PySpark中汇总不同值并创建百分比的有效方法
假设Ι具有这样的数据框:
ID A_score B_score
1 A123 8 2
2 B213 10 10
3 C421 9 9
4 C312 10 10
如何创建新的名为“ percentages”的列,并按组和日期给出百分比?
df
Day Group Counts
Monday 0 7
Monday 0 45
Monday 1 70
Tuesday 1 18
Tuesday 1 13
Tuesday 0 84
我正在做类似的事情:
expected df
Day Group Counts Percentage
Monday 0 7 7/52
Monday 0 45 7/45
Monday 1 70 70/70
Tuesday 1 18 18/31
Tuesday 1 13 13/31
Tuesday 0 84 84/84
但是我遇到了错误。
我应该使用Window功能吗?
解决方法
您的方法通常应该有效。您只需要为聚合提供别名,并将表达式放在括号中即可。
df_agg = df.groupby('day','group').agg((F.count('Counts') / F.sumDistinct('Counts')).alias('Percentage'))
df = df.join(df_agg,join=['day','group'],'left')
,
是的,您可以使用“窗口”功能来计算每天和分组的元素,然后进行除法:
from pyspark.sql import Window
window = Window.partitionBy('Day','Group')
df = df\
.withColumn('count_per_window',sum('Counts').over(window))\
.withColumn('Percentage',col('Counts')/col('count_per_window'))\
.drop('count_per_window')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。