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

如何在Pandas中提取多列唯一值并生成新DataFrame?

哈哈,我完全懂你碰到的这个小坑!你直接调用df.groupby(by=['C1','C2','C3'])得到的确实是Pandas的DataFrameGroupBy对象——它只是帮你把数据按指定列分好了组,但还没生成你要的那种去重后的结果。毕竟SQL里的GROUP BY在没有聚合函数时,默认是返回唯一的行组合,但Pandas的groupby需要你明确告诉它要执行什么操作才行。

两种实用方法获取C1/C2/C3的唯一组合DataFrame

你要的效果本质就是提取这三列的唯一行组合,下面是两种常用实现:

方法1:直接去重(最简洁高效)

Pandas的drop_duplicates()方法完美对应你要的SQL逻辑,指定要去重的列就能直接得到结果:

unique_df = df.drop_duplicates(subset=['C1', 'C2', 'C3'])

这个方法会保留每个唯一组合的第一行,返回的就是你想要的包含所有C1/C2/C3唯一组合的DataFrame。

方法2:用groupby配合聚合操作

如果你一定要用groupby的方式(比如后续还要扩展聚合逻辑),可以对分组后的对象执行简单聚合,再重置索引变回普通列:

# 方式A:取每个组的第一行,得到唯一组合
unique_df = df.groupby(['C1', 'C2', 'C3']).first().reset_index()

# 方式B:如果需要同时统计每个组合的出现次数
unique_df_with_count = df.groupby(['C1', 'C2', 'C3']).size().reset_index(name='occurrences')

这里的reset_index()很重要,因为groupby之后C1/C2/C3会变成索引,需要这一步把它们变回普通列,才能得到和SQL查询结构一致的DataFrame。

补充:为什么之前只得到GroupBy对象?

Pandas的groupby()函数本身只是定义分组规则,它返回的分组对象只是存储了分组的元信息,并没有实际处理数据。只有当你调用聚合方法(比如first()、size()、sum()等)时,它才会计算并返回最终的DataFrame结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:35:53