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

如何基于指定列对比Pandas DataFrame中不同类别的差异?

Pandas 对比不同类别在指定列的取值差异

原始数据构造

import pandas as pd
A = pd.DataFrame({'col1': ['A', 'A', 'B', 'B'], 'col2':['x','y','x1','y']})

生成的DataFrame如下:

col1col2
Ax
Ay
Bx1
By

需求说明

对比col1中类别A和B在col2上的取值差异,找出:

  • A有但B没有的col2值
  • B有但A没有的col2值

实现方案

方案一:利用集合差集(简洁高效)

集合天然支持成员关系对比,差集操作可直接得到两类的取值差异:

# 提取两类的col2值集合
a_col2_set = set(A[A['col1'] == 'A']['col2'])
b_col2_set = set(A[A['col1'] == 'B']['col2'])

# 计算差异
a_not_b = a_col2_set - b_col2_set
b_not_a = b_col2_set - a_col2_set

print("A有但B没有的col2值:", a_not_b)  # 输出: {'x'}
print("B有但A没有的col2值:", b_not_a)  # 输出: {'x1'}

方案二:使用Pandas的isin方法(贴合API风格)

通过isin方法判断取值是否存在于另一类的集合中,筛选出差异值:

# 获取B类的col2值列表
b_col2_vals = A[A['col1'] == 'B']['col2']
# 筛选A类中不在B类col2里的取值并去重
a_not_b = A[(A['col1'] == 'A') & (~A['col2'].isin(b_col2_vals))]['col2'].unique()

# 获取A类的col2值列表
a_col2_vals = A[A['col1'] == 'A']['col2']
# 筛选B类中不在A类col2里的取值并去重
b_not_a = A[(A['col1'] == 'B') & (~A['col2'].isin(a_col2_vals))]['col2'].unique()

print("A有但B没有的col2值:", a_not_b)  # 输出: ['x']
print("B有但A没有的col2值:", b_not_a)  # 输出: ['x1']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:07:14