pandas - 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()))
解决方案
(x > 0)
lambda 函数等逻辑运算的结果是布尔数组,因此(x > 0).sum()
将返回布尔结果的总和,这相当于True
结果数组中的实例数。
如果要x
在条件为 时返回总和True
,可以使用:lambda x: x[x > 0].sum()
推荐阅读
- python - 如何在脚本运行时将更多项目添加到多处理队列
- google-apps-script - 如何将 Range[ ] 转换为整数/类值?
- contiki - 如何向自己发送 runicast 消息?
- javascript - 将线性渐变与动态背景图像相结合
- c# - Roslyn Analyzer - 访问 ITextBuffer
- ios - 是否可以在 Linux 上运行 Azure 管道代理来构建 iOS 应用程序?
- react-native - 尝试使用 eval() 函数设置状态(React Native)
- sql - 使用日期类型是 postgrsql SET 语句
- amazon-web-services - 如何为 Paypal Ipn 消息保护 AWS Api Gateway 和 Lambda
- c# - 在 C# 中绘制旋转的文本