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

按C列分区比较A列值集合是否匹配的实现方法咨询

按列分区并检查取值集合匹配的实现方案

假设你使用Python的pandas库处理数据,以下是具体实现步骤:

1. 准备示例数据

先构造符合你描述的示例数据集(新增一个不匹配分区用于测试):

import pandas as pd

data = {
    'A': [22, 24, 22, 24, 22],
    'C': [0, 0, 1, 1, 2]
}
df = pd.DataFrame(data)

2. 计算各分区的A列取值集合

通过分组操作,提取每个C值对应的A列唯一值集合,使用frozenset保证集合可哈希、可比较:

# 获取每个C分组对应的A列唯一值集合
group_sets = df.groupby('C')['A'].apply(lambda x: frozenset(x.unique())).to_dict()

3. 生成匹配标记映射

以第一个分区的集合为基准,判断每个分区的集合是否与基准完全匹配,生成C值到匹配标记(1=匹配,0=不匹配)的映射:

# 取第一个分区的集合作为基准
base_set = next(iter(group_sets.values()))
# 生成匹配映射字典
match_map = {c_val: 1 if s == base_set else 0 for c_val, s in group_sets.items()}

4. 新增匹配标记列

将映射应用到原数据框,新增Match列:

df['Match'] = df['C'].map(match_map)

执行后,示例数据的输出结果为:

ACMatch
2201
2401
2211
2411
2220

简化写法(一步到位)

如果不需要保留分组集合的字典,也可以直接通过transform方法完成标记:

base_set = df.groupby('C')['A'].apply(lambda x: frozenset(x.unique())).iloc[0]
df['Match'] = df.groupby('C')['A'].transform(
    lambda x: 1 if frozenset(x.unique()) == base_set else 0
)

特殊场景处理:所有分区是否完全一致

如果需要判断所有分区的A列集合是否完全相同,并给所有行统一标记1或0,可以添加以下逻辑:

all_groups_match = len(set(group_sets.values())) == 1
df['All_Match'] = 1 if all_groups_match else 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:01:04