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

Pandas中不使用apply/lambda通过groupby比较两列的最简方法

Pandas 基于groupby实现分组两列逐行对比的最简方法(无apply/lambda)

你之前写的代码无法得到预期结果,核心原因是直接对GroupBy对象调用eq会按分组聚合后的维度做值对齐,不会返回和原表行号一一对应的逐行判断结果。

实现代码

首先构造示例测试DataFrame:

import pandas as pd

df = pd.DataFrame({
    "product1": ["apple", "apple"],
    "product2": ["apples", "apple"],
    "person": ["abby", "abby"]
})

核心逻辑调用groupby配套的transform方法即可,该方法会将运算结果按原表索引自动对齐,直接得到逐行判断的布尔序列,全程不需要apply或lambda:

res = df.groupby("person")["product1"].transform("eq", df["product2"])

执行后res的输出完全匹配预期:

0    False
1     True
dtype: bool

补充说明

  • 该写法全部基于pandas内置向量化运算,执行效率远高于apply类循环写法
  • transform会自动保留原DataFrame的行索引顺序,不需要额外做结果拼接、索引重置操作
  • 逻辑可直接扩展到其他对比场景,比如判断大小只需要把eq替换为gt(大于)、lt(小于)即可
  • 如果不需要按person分组限定对比范围,直接逐行判断两列相等可以不用groupby,直接写df.product1.eq(df.product2)就能拿到结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:15:34