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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:39:03