在Pandas中按经理分组统计含Full-Time=1的ID数量
问题
我查了很多统计相关的问答,但没找到合适的方案。我有一份就业历史数据集,需要按经理分组统计:有多少个ID的记录中出现过Full-Time=1(注意不是统计每个ID的Full-Time=1出现次数)。
数据集示例
ID Date Job Manager Full-Time 101 05/2022 Sales 103 1 101 06/2022 Sales 103 1 102 08/2022 Tech 105 0 102 09/2022 Tech 105 1 103 11/2021 Sales 110 0 104 04/2022 Sales 103 0 104 05/2022 Sales 103 1 104 06/2022 Sales 103 1 104 07/2022 Sales 103 1 104 08/2022 Sales 103 0 ...... 201 10/2022 HR 198 1
期望输出
Manager Full-Time Count 103 2 105 1 110 3 .... 198 2
我尝试过这段代码,但没得到想要的结果:
df['FT Count'] df.groupby('Manager')['Full-Time'].nunique
解决方案
你需要先锁定Full-Time=1的记录,再确保每个ID在对应经理下只被统计一次,最后按经理分组计数,具体实现如下:
分步实现
- 筛选出所有
Full-Time=1的行
ft_records = df[df['Full-Time'] == 1]
- 按
Manager和ID去重,避免同一个ID被重复统计
unique_ids = ft_records.drop_duplicates(subset=['Manager', 'ID'])
- 按
Manager分组统计去重后的ID数量
result = unique_ids.groupby('Manager')['ID'].count().reset_index(name='Full-Time Count')
一行代码简化
可以把上述步骤合并为一行:
result = df[df['Full-Time'] == 1].drop_duplicates(subset=['Manager', 'ID']).groupby('Manager')['ID'].count().reset_index(name='Full-Time Count')
结果说明
- 经理103对应的ID101、ID104都出现过Full-Time=1,所以计数为2
- 经理105仅ID102出现过Full-Time=1,计数为1,完全匹配你的期望输出
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

