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

如何在Pandas中按某列唯一值获取多列的唯一值?

分组获取多列唯一值并整理成指定格式

首先定义原始DataFrame:

import pandas as pd
df = pd.DataFrame({'val':['a', 'a', 'b', 'a', 'c'], 'g_1':[0, 0, 1,0,2], 'g_2':[0, 0, 0,0,1]})

单独处理g_1列时,通过以下代码可以正常获取每个val对应的唯一值:

print(df['g_1'].groupby(df['val']).unique().apply(pd.Series))

输出结果:

0
val   
a    0
b    1
c    2

但尝试同时处理g_1和g_2列时,执行以下代码会报错:

print(df[['g_1', 'g_2']].groupby(df['val']).unique().apply(pd.Series))

期望得到的结果格式:

g_1  g_2
val   
a    0    0
b    1    0
c    2    1

解决方案

方法1:使用agg结合lambda提取唯一值

由于每个val分组下的g_1和g_2都是单一唯一值,可以直接对分组后的列提取唯一值的第一个元素:

result = df.groupby('val').agg(lambda x: x.unique()[0])
print(result)

方法2:直接取分组后的第一个/最后一个元素

因为每个分组内的g_1和g_2值都相同,使用first()或last()可以快速得到结果:

result = df.groupby('val')[['g_1', 'g_2']].first()
print(result)

方法3:指定列处理逻辑再格式化

先对每列取唯一值,再通过applymap提取每个唯一值数组的第一个元素:

result = df.groupby('val').agg({'g_1': 'unique', 'g_2': 'unique'}).applymap(lambda x: x[0])
print(result)

报错原因说明

对多列分组后调用unique(),会返回每个分组的二维数组结构,此时用apply(pd.Series)无法正确解析为期望的列结构。而通过agg分别处理每列,再提取唯一值的第一个元素(因分组内该列仅一个唯一值),就能得到符合要求的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:40:13