按column z列表首个元素分组column m中的值
按Z列列表首个元素分组M列值
需求:将所有Z列列表中首个元素相同的行,把对应的M列值进行分组。
示例输入
m p z x001 Foo [z42, z56, z31] x321 Bar [z589, z78, z42] x5432 Paz [z67] x003 Foo [z589, z78, z32, z31] x5478 Bah [z987, z345, z52] x098 Fin [z42, z31] x783 Lon [z42, z210, z458, z192]
说明:M列的值唯一,其他列的值可能重复或完全匹配
期望输出
[x001, x098, x783] [x321, x003]
注:仅保留分组后包含至少2个元素的组,单个元素的组未输出。
实现方案(Python)
用字典按Z列首个元素做键来分组,最后过滤出元素数量≥2的组即可:
# 先把输入数据解析为结构化列表(实际场景可从文件/数据库读取后处理) data = [ {"m": "x001", "p": "Foo", "z": ["z42", "z56", "z31"]}, {"m": "x321", "p": "Bar", "z": ["z589", "z78", "z42"]}, {"m": "x5432", "p": "Paz", "z": ["z67"]}, {"m": "x003", "p": "Foo", "z": ["z589", "z78", "z32", "z31"]}, {"m": "x5478", "p": "Bah", "z": ["z987", "z345", "z52"]}, {"m": "x098", "p": "Fin", "z": ["z42", "z31"]}, {"m": "x783", "p": "Lon", "z": ["z42", "z210", "z458", "z192"]}, ] # 分组逻辑 groups = {} for row in data: first_z_element = row["z"][0] if first_z_element not in groups: groups[first_z_element] = [] groups[first_z_element].append(row["m"]) # 输出符合要求的分组 for group in groups.values(): if len(group) >= 2: print(group)
运行结果与期望输出一致:
['x001', 'x098', 'x783'] ['x321', 'x003']
内容的提问来源于stack exchange,提问作者samgrover
相关产品推荐
相关产品推荐

