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

如何在Pandas中实现Excel COUNTIFS?寻求无临时步骤的优化方案

问题描述

在Pandas中实现Excel的COUNTIFS(多条件计数)功能,统计每组key1 × key2组合下cond == 1的数量,需要得到两个结果:

  • 按分组键展示统计结果的DataFrame
  • 将统计结果映射回原DataFrame的版本
    现有实现需要创建临时列,寻求更优的计算方法。
示例数据
import pandas as pd
d = {'key1': list('AAAACB'),
    'key2': list('XYXXXX'),
    'cond': [1, 2, 1, 2, 1, 2]}
df = pd.DataFrame(data=d)
# 输出结果:
#   key1 key2  cond
# 0    A    X     1
# 1    A    Y     2
# 2    A    X     1
# 3    A    X     2
# 4    C    X     1
# 5    B    X     2
优化实现方法

无需创建临时列,利用Pandas中布尔值的特性(True等价于1,False等价于0),直接对条件表达式进行分组操作即可完成需求:

1. 获取分组统计结果(对应COUNTIFS)

pivot_key = ["key1", "key2"]
# 方式1:使用apply
df_grp = df.groupby(pivot_key, dropna=False)["cond"].apply(lambda x: (x == 1).sum()).reset_index(name="count_cond_1")

# 方式2:更简洁的agg写法
# df_grp = df.groupby(pivot_key, dropna=False).agg(count_cond_1=("cond", lambda x: (x == 1).sum())).reset_index()

df_grp
# 输出结果:
#   key1 key2  count_cond_1
# 0    A    X             2
# 1    A    Y             0
# 2    B    X             0
# 3    C    X             1

2. 将统计结果映射回原DataFrame

pivot_key = ["key1", "key2"]
# 使用transform直接计算每组符合条件的数量并映射回原表
df["count_cond_1"] = df.groupby(pivot_key, dropna=False)["cond"].transform(lambda x: (x == 1).sum())

df
# 输出结果:
#   key1 key2  cond  count_cond_1
# 0    A    X     1             2
# 1    A    Y     2             0
# 2    A    X     1             2
# 3    A    X     2             2
# 4    C    X     1             1
# 5    B    X     2             0
说明

上述方法省去了临时列的创建步骤,直接在分组操作中完成条件判断与计数,代码更简洁紧凑,同时保持了逻辑的清晰性。


内容的提问来源于stack exchange,提问作者Alexandre_K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:15:33