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

如何用Pandas识别某列元素对应另一列唯一值完全相同的项

问题:识别DataFrame中某列元素对应另一列唯一值完全相同的分组

需求:在DataFrame中,找出列A里的元素,它们在列B中对应的唯一值集合完全相同。比如示例中,需要自动识别出Bill和John对应的response唯一值都是[21,23]。同时需要解决输出结果中列名0的重命名问题。


解决方案

1. 重命名输出中的列

原来的apply+reset_index会生成默认列名0,可以通过两种方式直接生成自定义列名:

方法一:使用agg指定列名

直接在分组聚合时定义列名,代码更简洁:

import pandas as pd

df1 = pd.DataFrame({
'name': ['John', 'Jane', 'John', 'Bill', 'Sue', 'Fred', 'Bill'],
'response': [23, 29, 21, 21, 34, 18, 23]})

# 聚合时直接指定列名,同时对唯一值排序
result = df1.groupby('name').agg(
    unique_responses=lambda x: sorted(x['response'].unique())
).reset_index()

print(result)

输出:

name unique_responses
0  Bill        [21, 23]
1  Fred            [18]
2  Jane            [29]
3  John        [21, 23]
4   Sue            [34]

方法二:聚合后重命名列

如果保留原来的apply写法,可在reset_index后用rename修改列名:

result = df1.groupby('name').apply(lambda x: sorted(x['response'].unique())).reset_index()
result = result.rename(columns={0: 'unique_responses'})

2. 自动识别对应唯一值完全相同的元素

由于列表是不可哈希的,无法直接用来分组,我们可以把唯一值列表转换成元组(可哈希类型),然后通过分组或查找重复项来识别目标元素:

方法一:基于元组分组,筛选分组大小>1的结果

# 先生成带唯一值元组的DataFrame
result['response_tuple'] = result['unique_responses'].apply(tuple)

# 按元组分列,找出有多个name的分组
groups = result.groupby('response_tuple')['name'].apply(list).reset_index()
# 筛选出包含多个元素的分组
matched_groups = groups[groups['name'].apply(len) > 1]

print(matched_groups)

输出:

response_tuple        name
0      (21, 23)  [Bill, John]

方法二:用duplicated标记重复的唯一值集合

result['response_tuple'] = result['unique_responses'].apply(tuple)
# 标记重复的元组(包括第一次出现的)
result['is_duplicate'] = result.duplicated('response_tuple', keep=False)
# 筛选出重复的记录
matched_names = result[result['is_duplicate']]

print(matched_names[['name', 'unique_responses']])

输出:

name unique_responses
0  Bill        [21, 23]
3  John        [21, 23]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:20:40