Pandas groupby按列聚合sum()仅提供使用lambda的计数

Pandas groupby按列聚合sum()仅提供使用lambda的计数,pandas,lambda,sum,aggregate,Pandas,Lambda,Sum,Aggregate,我一直试图通过使用lambda函数来选择要求和的行()来聚合一个组中的多个列。我的问题是sum()只提供一个计数。我在熊猫方面非常平庸,已经搜索过但没有找到答案。任何答案都将不胜感激,我当然非常感谢您抽出时间 groupedByEmployeeShift['Duration1'] = groupedByEmployeeShift['Duration'] ### create a dummy column for ShiftOT below groupedByEmployeeShift['Rou

我一直试图通过使用lambda函数来选择要求和的行()来聚合一个组中的多个列。我的问题是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()))

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


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

非常感谢。成功了。我得到了布尔值,但并不真正理解x[x…需要进一步研究。感谢。表达式
x[x>0]
使用布尔索引,表示“返回数组
x
的子集,其中
x
的所有元素都大于零”。这有更多详细信息: