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

无需数值聚合的Pandas分组操作:获取指定列的唯一组合

更简洁实现Pandas中类似SQL SELECT DISTINCT的方法

嘿,你完全不用通过聚合再删列这种绕路的方式!Pandas里有好几种直接实现你需求的方法,完美对应SQL里的SELECT DISTINCT day, distinct_id逻辑:

方法1:用drop_duplicates()(最直观推荐)

这是最直接的方式,专门用来保留指定列的唯一组合,代码简洁明了:

import pandas as pd

df = pd.DataFrame(data = { 
    'day': ['2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01', '2020-10-02', '2020-10-02', '2020-10-02', '2020-10-02', '2020-10-02'], 
    'distinct_id': ['a', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'c', 'c'], 
    'value': [71, 72, 73, 74, 74, 73, 72, 71, 71, 72, 73] 
})

# 只保留day和distinct_id的唯一组合,重置索引
result = df[['day', 'distinct_id']].drop_duplicates().reset_index(drop=True)
print(result)

运行后就会得到你想要的输出:

day distinct_id
0  2020-10-01           a
1  2020-10-01           b
2  2020-10-01           c
3  2020-10-02           a
4  2020-10-02           b
5  2020-10-02           c

方法2:用groupby配合head(1)

如果你已经习惯用groupby的思路,也可以直接取每个分组的第一行,不用做聚合:

result = df.groupby(['day', 'distinct_id']).head(1).reset_index(drop=True)[['day', 'distinct_id']]

这个逻辑是先按day和distinct_id分组,然后每个组只保留第一行,最后筛选出需要的两列。

方法3:用pd.DataFrame.drop_duplicates()的另一种写法

如果你不想先筛选列,也可以直接在整个DataFrame上指定subset参数,然后再提取需要的列:

result = df.drop_duplicates(subset=['day', 'distinct_id'])[['day', 'distinct_id']].reset_index(drop=True)

这种写法和方法1效果一致,只是顺序不同,看你个人习惯选择。

对比你之前的临时方案,这些方法都不需要处理冗余列的删除操作,直接一步到位得到目标结果,代码更简洁也更易维护~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:58:16