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

如何在Pandas中实现Excel适用于字符串列的带条件SUMPRODUCT功能

Pandas实现Excel SUMPRODUCT对应功能(含字符串列场景)

你提供的Excel公式本质是对到当前行截止的[A,B,C]三列组合的出现次数做统计,首次出现返回1,后续重复出现返回0,字符串列不影响逻辑判断,不需要转换为整数也可以实现。


实现方法

你可以根据需求选择以下两种方案:

方案1:duplicated方法(最简便)

直接对分组列判断是否是首次出现,取反后转整型即可,代码如下:

import pandas as pd

# 示例数据构造
df = pd.DataFrame({
    'A': ['John', 'Mike', 'Mike'],
    'B': ['Sanchez', 'Isner', 'Isner'],
    'C': ['Active', 'Inactive', 'Inactive']
})

# 生成Output列
df['Output'] = (~df.duplicated(subset=['A','B','C'], keep='first')).astype(int)

运行后得到的Output列和你给出的示例结果完全一致。

方案2:完全复刻SUMPRODUCT逐行累计逻辑

如果需要严格对应Excel的SUMPRODUCT计算过程(逐行到当前行的条件判断乘积求和),可以用自定义函数逐行计算,代码如下:

def sumproduct_curr_row(row, df):
    # 对应Excel的(A$2:A2=A2)*(C$2:C2=C2)*(B$2:B2=B2)求和逻辑
    cond = (df.loc[:row.name, 'A'] == row['A']) & \
           (df.loc[:row.name, 'B'] == row['B']) & \
           (df.loc[:row.name, 'C'] == row['C'])
    return 0 if cond.sum() > 1 else 1

df['Output'] = df.apply(lambda x: sumproduct_curr_row(x, df), axis=1)

这种方式和你原Excel公式的计算逻辑完全一致,不管列是字符串还是数值类型都可以直接运行,不需要做类型转换。


结果验证

两种方案运行后得到的df结果如下:

ABCOutput
JohnSanchezActive1
MikeIsnerInactive1
MikeIsnerInactive0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:03