如何在Pandas中按Manager ID分组统计Full-Time为1的记录数
按Manager ID分组统计Full-Time为1的记录数
需求说明
统计DataFrame中Full-Time列值为1的记录数,并按Manager ID分组汇总。
原始DataFrame
ID Full-Time Manager ID 101 0 103 102 1 103 103 1 110 104 0 107 105 1 103 106 1 107 107 1 110 108 0 107 109 1 103 110 1 NaN
期望结果
Manager ID Full-Time count 103 3 107 1 110 2
代码优化与正确实现
你尝试的代码逻辑方向是对的,但可以调整得更清晰高效,以下是两种可行方案:
方案一:优化筛选后分组的逻辑
现有代码可以得到统计结果,但需要调整列名和输出格式,用size()替代count()语义更贴合“记录数”统计:
result = df[df['Full-Time'] == 1].groupby('Manager ID').size().reset_index(name='Full-Time count')
size()直接统计分组内的总行数,和需求的“记录数”完全匹配reset_index(name='Full-Time count')将分组索引转为普通列,并设置期望的结果列名,输出格式和需求完全一致
方案二:直接分组求和(更高效)
不需要提前筛选数据,利用Full-Time列值为1的特性,分组后直接求和即可得到对应数量,性能更优:
# 分组求和得到各经理的Full-Time=1记录数 result = df.groupby('Manager ID')['Full-Time'].sum().reset_index(name='Full-Time count') # 过滤掉没有符合条件记录的经理 result = result[result['Full-Time count'] > 0]
注意事项
- 两种方案都会自动排除
Manager ID为NaN的分组,和期望结果一致;若需保留该分组,可在groupby中添加dropna=False参数 - 方案二减少了一次数据筛选操作,在数据量较大时优势更明显
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

