首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS与PySpark (频率、百分比、累积频率和累积百分比)

SAS与PySpark (频率、百分比、累积频率和累积百分比)
EN

Stack Overflow用户
提问于 2021-01-19 08:25:19
回答 1查看 905关注 0票数 0

我正在寻找一种在PySpark中重现SAS代码的方法。我找到了这段代码完全符合我的需要。然而,它是在潘达斯。我想确保它确实使用了Spark所能提供的最好的功能,因为代码将使用大量的数据集。在另一个岗位上 (也适用于这个StackOverflow答案),我还在PySpark中找到了计算分布式groupwise累积和的指令,但不确定如何使其适应我的目的。

下面是一个输入和输出示例(我的原始数据集将有几十亿行):

输入数据集:

代码语言:javascript
复制
        state
0       Delaware
1       Delaware
2       Delaware
3       Indiana
4       Indiana
...     ...
1020    West Virginia
1021    West Virginia
1022    West Virginia
1023    West Virginia
1024    West Virginia

1025 rows × 1 columns

预期输出:

代码语言:javascript
复制
    state           Frequency   Percent Cumulative Frequency    Cumulative Percent
0   Vermont         246         24.00   246                     24.00
1   New Hampshire   237         23.12   483                     47.12
2   Missouri        115         11.22   598                     58.34
3   North Carolina  100         9.76    698                     68.10
4   Indiana         92          8.98    790                     77.07
5   Montana         56          5.46    846                     82.54
6   West Virginia   55          5.37    901                     87.90
7   North Dakota    53          5.17    954                     93.07
8   Washington      39          3.80    993                     96.88
9   Utah            29          2.83    1022                    99.71
10  Delaware        3           0.29    1025                    100.00
EN

回答 1

Stack Overflow用户

发布于 2021-01-19 08:45:14

您可以首先按状态分组以获取频率和百分比,然后在窗口上使用sum获取累积频率和百分比:

代码语言:javascript
复制
result = df.groupBy('state').agg(
    F.count('state').alias('Frequency')
).selectExpr(
    '*',
    '100 * Frequency / sum(Frequency) over() Percent'
).selectExpr(
    '*',
    'sum(Frequency) over(order by Frequency desc) Cumulative_Frequency', 
    'sum(Percent) over(order by Frequency desc) Cumulative_Percent'
)

result.show()
+-------------+---------+-------+--------------------+------------------+
|        state|Frequency|Percent|Cumulative_Frequency|Cumulative_Percent|
+-------------+---------+-------+--------------------+------------------+
|West Virginia|        5|   50.0|                   5|              50.0|
|     Delaware|        3|   30.0|                   8|              80.0|
|      Indiana|        2|   20.0|                  10|             100.0|
+-------------+---------+-------+--------------------+------------------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65787753

复制
相关文章

相似问题

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