首页 > 解决方案 > 如何在 groupby 之后在 lambda 中使用条件进行聚合

问题描述

之后groupby,我想有条件,只agg选择lambda'product1_Gift0' == 1

但似乎无法得到答案

需要有关“保证金”计算的指导,而不是全部计算,仅在何时计算'product1_Gift0' equal '1'

data = [['john', 'A01', 0, 0.0],['john', 'A01', 1, 1.0],['john', 'A01', 1, 0.5],['jess', 'B01', 0, 0.0],['jess', 'B01', 0, 0.0],['jess', 'B01', 1, 0.8]]


df2 = pd.DataFrame(data, columns = ['member', 'orderID','product1_Gift0','margin']) 

df3 = df2.groupby('member').agg({
                                 'product1_Gift0': lambda x: sum(x)/len(x),
                                 'margin' : lambda x: sum(x)/len(x),
                              })

actual_result = [['john', 'A01', 0.3333, 0.50],
                 ['john', 'A01', 0.6667, 0.27]]

expected_result = [['john', 'A01', 0.3333, 0.75],
                   ['john', 'A01', 0.6667, 0.80]]

谢谢

标签: pythonlambdagroup-byaggregate

解决方案


试试这个:

>>> df2.groupby('member').apply(lambda x: pd.Series({"product_Gift0_mean": x.product1_Gift0.mean(), "margin_mean": sum(x.margin * (x.product1_Gift0==1))/(x.product1_Gift0==1).sum()}))
        margin_mean  product_Gift0_mean
member
jess           0.80            0.333333
john           0.75            0.666667



推荐阅读