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

如何从DataFrame中创建多键共享多值的关联分组

问题:按共享值集合对键进行分组整理数据集

原始数据格式如下:

XX  AAA
XX  BBB
XX  CCC
XX  DDD
XX  EEE
XX  FFF
YY  AAA
YY  BBB
YY  CCC
YY  DDD
YY  EEE
YY  FFF
ZZ  AAA
ZZ  BBB
LL  CCC
JJ  DDD

期望输出格式:

XX, YY: AAA, BBB, CCC, DDD, EEE, FFF
ZZ: AAA, BBB 
LL: CCC
JJ: DDD

核心需求:将拥有完全相同值集合的多个键归为一组,对应同一组值。尝试过用for循环和字典存储键值对,但无法实现多键关联同一值集合的分组方式,寻求技术解决方案。


解决方案

实现思路

  1. 先收集每个键对应的所有值,存储为集合(确保值的唯一性,且方便后续判断集合是否完全一致)。
  2. 反转映射关系:以排序后的元组(集合不可作为字典键,元组可以)作为新键,将拥有相同值集合的原始键归为一组。
  3. 按要求格式拼接每组的键和值,输出结果。

Python 代码实现

# 原始数据(如果从文件读取,可替换为 open("data.txt").read())
raw_data = """XX  AAA
XX  BBB
XX  CCC
XX  DDD
XX  EEE
XX  FFF
YY  AAA
YY  BBB
YY  CCC
YY  DDD
YY  EEE
YY  FFF
ZZ  AAA
ZZ  BBB
LL  CCC
JJ  DDD"""

# 1. 构建键到值集合的映射
key_value_sets = {}
for line in raw_data.splitlines():
    key, value = line.strip().split()
    if key not in key_value_sets:
        key_value_sets[key] = set()
    key_value_sets[key].add(value)

# 2. 反转映射:值集合(转排序元组)到键列表的映射
value_group_to_keys = {}
for key, values in key_value_sets.items():
    # 转排序元组,确保相同值集合的键一致(不受值顺序影响)
    sorted_value_tuple = tuple(sorted(values))
    if sorted_value_tuple not in value_group_to_keys:
        value_group_to_keys[sorted_value_tuple] = []
    value_group_to_keys[sorted_value_tuple].append(key)

# 3. 按格式输出结果
for value_tuple, keys in value_group_to_keys.items():
    # 对键排序,保证输出顺序整齐(可选)
    sorted_keys = sorted(keys)
    print(f"{', '.join(sorted_keys)}: {', '.join(value_tuple)}")

代码说明

  • 第一步遍历原始数据,为每个键建立对应的所有值的集合,自动处理重复值(如果原始数据有重复的键值对也不影响)。
  • 第二步将值集合转为排序后的元组,这样即使不同键的集合值顺序不同,只要元素完全相同,就会被归为同一组。
  • 第三步将每组的键用逗号连接,值用逗号连接,输出符合要求的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:43:13