代码之家  ›  专栏  ›  技术社区  ›  Laurynas G

使用groupby在另一列上使用条件聚合行上的列

  •  0
  • Laurynas G  · 技术社区  · 4 年前

    假设我有以下Pyspark数据帧:

     Country    Direction    Quantity     Price
     Belgium    In           5            10
     Belgium    Out          2            8
     Belgium    Out          3            9
     France     In           2            3
     France     Out          3            2
     France     Out          4            3
     
    

    是否可以按此数据帧按列“国家”分组,“价格”列的聚合平均值作为正常值,但对“数量”列使用函数“第一”,仅在“方向”列为“输出”时对行使用函数“第一”? 我想应该是这样的:

    df.groupby("Country").agg(F.mean('Price'), F.first(F.col('Quantity').filter(F.col('Direction') == "Out")))
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   mck    4 年前

    你可以掩盖真相 Quantity 对于 Direction != 'out' 然后做一个 first 具有 ignoreNulls :

    df.groupby("Country").agg(
        F.mean('Price'),
        F.first(
            F.when(
                F.col('Direction') == "Out",
                F.col('Quantity')
            ),
            ignoreNulls=True
        )
    )