【问题标题】:Get Min and Max from values of another column after a Groupby in PySpark在 PySpark 中的 Groupby 之后从另一列的值中获取最小值和最大值
【发布时间】:2021-06-08 14:03:51
【问题描述】:

在 pyspark 的其他两列中进行分组后,我试图从列的值中获取最小值和最大值。

数据集如下所示:

|      country      |     company    |   value   |
|-------------------|----------------|-----------|
|          arg      |       hh       |   3       |
|          arg      |       hh       |   2       |
|          arg      |       go       |   4       |
|          arg      |       go       |   3       |
|          bra      |       go       |   1       |
|          bra      |       go       |   2       |
|          bra      |       hh       |   3       |
|          bra      |       hh       |   2       |

我目前的实现是这个:

from pyspark.sql.functions import col, first, min, max

new_df = df.groupBy("country", "company").agg(first("value").alias("value"), 
                                              min("value").alias("min_value"), 
                                              max("value").alias("max_value")
                                             )

但我得到的结果不正确,因为我得到了这个:

|      country      |     company    |   value   |   min_value   |   max_value   |
|-------------------|----------------|-----------|---------------|---------------|
|          arg      |       hh       |   3       |   3           |   3           |
|          arg      |       hh       |   2       |   2           |   2           |
|          arg      |       go       |   4       |   4           |   4           |
|          arg      |       go       |   3       |   3           |   3           |
|          bra      |       go       |   1       |   1           |   1           |
|          bra      |       go       |   2       |   2           |   2           |
|          bra      |       hh       |   3       |   3           |   3           |
|          bra      |       hh       |   2       |   2           |   2           |

我希望得到类似的东西:

|      country      |     company    |   value   |   min_value   |   max_value   |
|-------------------|----------------|-----------|---------------|---------------|
|          arg      |       hh       |   3       |   2           |   3           |
|          arg      |       hh       |   2       |   2           |   3           |
|          arg      |       go       |   4       |   3           |   4           |
|          arg      |       go       |   3       |   3           |   4           |
|          bra      |       go       |   1       |   1           |   2           |
|          bra      |       go       |   2       |   1           |   2           |
|          bra      |       hh       |   3       |   2           |   3           |
|          bra      |       hh       |   2       |   2           |   3           |

【问题讨论】:

    标签: python dataframe pyspark


    【解决方案1】:

    与分组的数据框进行连接

    from pyspark.sql.functions import min, max
    
    df.join(df.groupby('country', 'company').agg(min('value').alias('min_value'), 
                                                 max('value').alias('max_value')),
                                                 on=['country', 'company'])
    

    这是您正在寻找的(无序)结果

    +-------+-------+-----+---------+---------+
    |country|company|value|min_value|max_value|
    +-------+-------+-----+---------+---------+
    |    bra|     go|    1|        1|        2|
    |    bra|     go|    2|        1|        2|
    |    bra|     hh|    3|        2|        3|
    |    bra|     hh|    2|        2|        3|
    |    arg|     hh|    3|        2|        3|
    |    arg|     hh|    2|        2|        3|
    |    arg|     go|    4|        3|        4|
    |    arg|     go|    3|        3|        4|
    +-------+-------+-----+---------+---------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-07
      • 2016-02-16
      • 1970-01-01
      • 2019-07-13
      • 2020-05-20
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      相关资源
      最近更新 更多