Pandas如何提取两列值重复且第三列值不同的分组对应行索引
实现代码
import pandas as pd data = {"name": ["nameA", "nameB", "nameC", "nameD", "nameA", "nameB", "nameC", "nameD", "nameE", "nameA", "nameC", "nameD"], "id": [100, 200, 300, 400, 100, 200, 300, 400, 500, 100, 300, 400], "value": ["v1", "v2", "v3", "v4", "v1", "v2", "v105", "v107", "v5", "v1", "v3615", "v4"]} df = pd.DataFrame(data) # 筛选出分组内value存在不同取值的所有行 valid_rows = df.groupby(['name', 'id']).filter(lambda g: g['value'].nunique() > 1) # 按分组提取索引,转为要求的元组格式 output = tuple(tuple(grp.index) for _, grp in valid_rows.groupby(['name', 'id'])) print(output)
运行后输出:
((2, 6, 10), (3, 7, 11))
原理解释
- 用
groupby(['name', 'id']).filter()直接从分组维度做判断:只有当分组内value列的唯一值数量大于1时,才保留该分组的所有行,自动过滤掉三列完全重复的分组 - 再对过滤后的数据按
name、id重新分组,提取每个分组的索引即可得到需要的结果
原有方法问题说明
你之前使用的duplicated仅能识别行级重复,无法判断同一个(name, id)分组下是否存在不同的value取值,所以会把name、id、value三列全重复的分组也纳入结果,不符合需求。
内容的提问来源于stack exchange,提问作者Georgi Stoyanov
相关产品推荐
相关产品推荐

