You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas新增列实现COUNTIFS多条件计数统计

Pandas实现等价Excel COUNTIFS多条件计数并新增列

针对逐行展示对应主管名下男性员工总数的需求,以下是两种可直接复用的Pandas原生实现方案:


方法1:向量化实现(推荐,大数据量性能最优)

这个方案先统一完成分组统计,再做值映射,不会逐行遍历全表,十万行以上数据也能快速出结果:

import pandas as pd

# 第一步:统计每个主管名下的男性员工总数
# 先筛选性别为男的记录,按主管分组计数
male_count = df[df["员工性别"] == "男"].groupby("对应主管姓名")["员工姓名"].count()

# 第二步:映射结果到新列,空值填0(对应主管无男性下属的场景),转成整数格式
df["主管名下男性员工总人数"] = df["对应主管姓名"].map(male_count).fillna(0).astype(int)
  • 性能优势:全程用Pandas向量化运算,不需要逐行扫描全表,百万行级数据也能秒级返回结果
  • 边界处理:fillna(0)用于覆盖某主管名下没有男性员工的场景,避免新列出现空值,最后转成整数类型更符合计数结果的展示习惯
  • 多条件扩展:如果要叠加更多计数规则(比如同时要求入职满1年、绩效为A等),只要在第一步筛选数据时追加对应的布尔判断即可,例:df[(df["员工性别"] == "男") & (df["入职年限"] >= 1) & (df["绩效等级"] == "A")],和COUNTIFS追加条件的逻辑完全一致

方法2:类Excel公式写法(小数据集可读性最高)

如果数据量不大(10万行以内),可以用和Excel COUNTIFS逻辑完全一致的写法,新手更容易理解和调整条件:

df["主管名下男性员工总人数"] = df.apply(
    lambda row: (
        (df["对应主管姓名"] == row["对应主管姓名"]) 
        & (df["员工性别"] == "男")
    ).sum(),
    axis=1
)
  • 逻辑对齐Excel:写法和在Excel里写COUNTIFS(主管列, 当前行主管, 性别列, "男")的思路完全一致,学习成本低
  • 适用场景:小数据集下用这个写法几乎感知不到性能差异,调整条件更灵活,每一个(df["列名"] == 判定值)片段就对应COUNTIFS函数里的一组「条件区域-条件」参数,加新条件时直接用&拼接新判断语句即可

注意:如果源数据里「对应主管姓名」列存在空值,建议先做缺失值填充或者过滤,否则统计时会把空值当作一个独立的主管分组,出现不符合预期的计数结果。

以3列结构的测试数据为例,代码运行后新列的效果参考:

员工姓名对应主管姓名员工性别主管名下男性员工总人数
张A刘主管男3
李B刘主管女3
王C陈主管男1
赵D刘主管男3
孙E刘主管男3
周F陈主管女1

内容的提问来源于stack exchange,提问作者Karthik P H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:48:25