如何使用Pandas提取Excel中含全量ID的Name-Subname组合数据
用Pandas提取满足ID全值条件的Name+Subname组合
嘿,这个需求我经常碰到,用Pandas处理起来很顺手,我给你一步步拆解怎么做:
需求回顾
我们有个包含Name、subname、ID三列的表格,要找出Name和subname的组合完全相同,并且该组合对应的ID必须同时包含1、2、3三个值的所有组合,最后只输出这些符合条件的Name和subname。
实现步骤&代码
首先先把示例数据构造出来(你可以直接替换成自己的Excel数据,用pd.read_excel()读取就行):
import pandas as pd # 构造题目里的示例数据 data = { 'Name': ['A', 'A', 'A', 'A', 'A', 'F', 'F', 'F'], 'subname': ['B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'], 'ID': [1, 2, 3, 1, 2, 1, 2, 3] } df = pd.DataFrame(data)
接下来是核心处理逻辑:
- 按
Name和subname分组,检查每个分组里的ID集合是否正好是{1,2,3} - 筛选出符合条件的分组,最后去重得到唯一的组合
# 筛选出ID包含全部1、2、3的分组对应的行 filtered_df = df.groupby(['Name', 'subname']).filter(lambda x: set(x['ID']) == {1, 2, 3}) # 只保留Name和subname列,并且去重(因为每个组合会有3行数据) result = filtered_df[['Name', 'subname']].drop_duplicates() # 打印结果 print(result)
运行结果
执行后会输出你想要的结果:
Name subname 0 A B 5 F C
另一种简洁写法
如果你不想保留原行数据,只想直接拿到符合条件的组合,也可以用这种方式:
# 先判断每个分组是否符合条件,再筛选出符合条件的分组键 valid_combinations = df.groupby(['Name', 'subname']).apply(lambda x: set(x['ID']) == {1, 2, 3}) result = valid_combinations[valid_combinations].reset_index()[['Name', 'subname']] print(result)
这个写法和上面的结果完全一致,看你个人习惯选哪种就行。
内容的提问来源于stack exchange,提问作者NAGA RAJ S
相关产品推荐
相关产品推荐

