首页 > 解决方案 > Pandas groupby 按列聚合 sum() 仅使用 lambda 提供计数

问题描述

我一直在尝试使用 lambda 函数来聚合 groupby 中的多个列来选择要 sum() 的行。我遇到的问题是 sum() 只提供一个计数。我在熊猫方面非常平庸,已经搜索但没有找到答案。任何答案都会非常感激,我当然很感激你的时间。

groupedByEmployeeShift['Duration1'] = groupedByEmployeeShift['Duration']  ### create a dummy column for ShiftOT below
groupedByEmployeeShift['RoundedInMinutes1'] = groupedByEmployeeShift['RoundedInMinutes']  ### create a dummy column for RoundedInMinutes below
groupedByEmployeeShift['RoundedOutMinutes1'] = groupedByEmployeeShift['RoundedOutMinutes']  ### create a dummy column for RoundedOutMinutes below

shiftStats = groupedByEmployeeShift.groupby('employee').agg(
    WorkLocation = ('WorkedLocation', 'first'),
    AllShifts = ('Duration', 'count'),
    OTShifts = ('Duration1', lambda x: (x > 8).sum()),
    NoRoundedInMinutes = ('RoundedInMinutes', lambda x: (x == 0).sum()),
    NoRoundedOutMinutes = ('RoundedOutMinutes', lambda x: (x == 0).sum()),
    RoundedInMinutes = ('RoundedInMinutes1', lambda x: (x > 0).sum()),
    RoundedOutMinutes = ('RoundedOutMinutes1', lambda x: (x > 0).sum()))

标签: pandaslambdasumaggregate

解决方案


(x > 0)lambda 函数等逻辑运算的结果是布尔数组,因此(x > 0).sum()将返回布尔结果的总和,这相当于True结果数组中的实例数。

如果要x在条件为 时返回总和True,可以使用:lambda x: x[x > 0].sum()


推荐阅读