如何将groupBy和聚合函数应用于PySpark DataFrame中的特定窗口?

马里奥安萨斯

我想将AgroupBy和后续agg函数应用于PySpark DataFrame,但仅应用于特定窗口。一个例子可以最好地说明这一点。假设我有一个名为的数据集df

df.show()

    +-----+----------+----------+-------+
    |   ID| Timestamp| Condition|  Value|
    +-----+----------+----------+-------+
    |   z1|         1|         0|     50|
|-------------------------------------------|
|   |   z1|         2|         0|     51|   |
|   |   z1|         3|         0|     52|   |
|   |   z1|         4|         0|     51|   |
|   |   z1|         5|         1|     51|   |
|   |   z1|         6|         0|     49|   |
|   |   z1|         7|         0|     44|   |
|   |   z1|         8|         0|     46|   |
|-------------------------------------------|
    |   z1|         9|         0|     48|
    |   z1|        10|         0|     42|
 +-----+----------+----------+-------+

特别是,我想做的是对列所在的行Condition == 1(即本例中的第5行)应用一种+/- 3行的窗口如上面的DataFrame所示,在该窗口内,我想找到column的最小值和columnValue的相应值Timestamp,从而获得:

+----------+----------+
| Min_value| Timestamp|
+----------+----------+
|        44|         7|
+----------+----------+

有谁知道该如何解决?

提前谢谢了

马里奥安萨斯

麦克

您可以使用跨越前3行和后3行的窗口,获取最小值并过滤条件:

from pyspark.sql import functions as F, Window

df2 = df.withColumn(
    'min',
    F.min(
        F.struct('Value', 'Timestamp')
    ).over(Window.partitionBy('ID').orderBy('Timestamp').rowsBetween(-3,3))
).filter('Condition = 1').select('min.*')

df2.show()
+-----+---------+
|Value|Timestamp|
+-----+---------+
|   44|        7|
+-----+---------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将聚合函数应用于Pandas中数据透视表的所有列

如何将聚合函数应用于Google BigQuery中从JSON提取的数据?

如何将条件应用于 PySpark 中的 groupby 数据框

如何将函数应用于PySpark DataFrame的指定列的每一行

如何将函数应用于 DataFrame 列?

如何将函数应用于Spark DataFrame的列?

如何将不同的聚合函数应用于pandas中的不同列?

如何将不同的GROUP BY应用于MySql中的每个聚合函数

Pyspark-如何仅将函数应用于DataFrame中列的子集?

如何将映射函数应用于 mutate 和 case_when 函数中的动态列名?

如何将算术运算应用于MySQL中的聚合列?

如何将Window函数应用于DataFrame中的多列

如何将特定列应用于R中的sapply函数?

如何将条件计数(重置)应用于PySpark中的分组数据?

将函数应用于python熊猫中的groupby对象

Haskell 中的 $ 是什么,以及如何将函数应用于函数

将函数应用于 PySpark 数据框中的列

如何使用groupby将多个函数应用于Pandas中的多个列?

如何将类内的函数应用于pandas Dataframe

如何将日期构造函数应用于 JSON 对象的特定属性

Clojure:如何将函数应用于特定嵌套级别的值?

如何将函数应用于数组中的所有元素(在C ++模板类中)

如何将我的函数应用于 DataFrame 列?

如何将<forcedType>应用于jOOQ中的存储函数?

如何将函数应用于dplyr链中的整个表

如何将函数应用于熊猫中每一行的对象属性

如何将函数应用于多个列以在R中创建多个新列?

如何将函数应用于列表中的每个元素,然后列出输出列表?

如何将函数应用于数据框中的一定数量的行?