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

pkbketx9  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(399)

假设我有以下PyparkDataframe:

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

是否可以按此Dataframe按列“country”分组,“price”列的聚合平均值作为正常值,但对“quantity”列使用函数“first”,仅在“direction”列为“out”时才对行使用?我想应该是这样的:

df.groupby("Country").agg(F.mean('Price'), F.first(F.col('Quantity').filter(F.col('Direction') == "Out")))
rkue9o1l

rkue9o1l1#

你可以遮住 Quantity 为了 Direction != 'out' 做一个 firstignoreNulls :

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

相关问题